-1

我试图了解object == 运算符比较的内部实现,以便为我的用户定义的类对象实现String ==的相同行为。

下面是我的实现逻辑。

1. 豆类

package com.study.equals;

public class SomeBean {
    int id;
    
    public SomeBean(int id) {
        this.id = id;
    }
    
    @Override
    public boolean equals(Object obj) {
        if(obj instanceof SomeBean) {
            return this.id==((SomeBean)obj).id;
        } else {
            return false;
        }
    }
    
    @Override
    public int hashCode() {
        return this.id + 2000;
    }
    
    @Override
    public String toString() {
        return "[Inside toString: " + this.hashCode() + "]";
    }
}

2. 测试班

包 com.study.equals;

公共类测试{

public static void main(String[] args) {
    SomeBean obj1 = new SomeBean(10);
    SomeBean obj2 = new SomeBean(10);
    if(obj1 == obj2) {
        System.out.println("true");
    }else {
        System.out.println("false");
    }   
}

}

  • 预期输出:真
  • 实际输出:假

怀疑

  • 有人可以帮助我理解为什么我在这里变得虚假吗?
  • 我怎样才能在这里得到真实的回应。
4

1 回答 1

0

obj1 == obj2true如果obj1并且obj2指的是完全相同的对象,则返回。obj1.equals(obj2)可以(如您的情况)比较两个对象的内容,并且可以为两个不同的对象返回 true ,因为实现了 method equals

您通过语句获得相同的对象(堆内存中的相同地址,相同的引用)obj1 = obj2

如果你这样做,

obj1 = new ...
obj2 = new ...

这些总是两个不同的对象。您强制 java 创建两个新对象。根据==.

于 2021-03-07T15:47:07.627 回答