在哪种情况下,Java引用相等可能与未覆盖equals()的类型的对象的equals()相等?

时间:2009-05-20 16:00:44

标签: java

是否有任何可能意味着

的魔法
(object0 == object1) != (object0.equals(object1))

其中object0和object1都是某种类型,它没有覆盖Object.equals()?

9 个答案:

答案 0 :(得分:16)

没有。这正是Object的定义。equals()

...当且仅当x和y引用同一个对象时,此方法才返回true(x == y的值为true)...

public boolean equals( Object o ) { 
   return this == o;
}

答案 1 :(得分:8)

是的,如果“object0的类型未覆盖Object.equals()”,则表示特定类型而非超类。

如果object0object1属于B类,B会扩展A,A会覆盖equals(Object obj)但B不会,那么B可能不会覆盖{{ 1}}但是equals(Object obj)

答案 2 :(得分:5)

好吧,如果object0 == null并且object1 == null,第一个将传递true,第二个传递NullPointerException ;-)除此之外,应该没有可观察到的差异。

答案 3 :(得分:3)

虽然对象本身不会覆盖equals(),但是对象的超类之一可能会覆盖equals()方法......

如果您正在使用eclipse:打开object.java文件并按两次control-o。输入'equals'并检查您是否只看到一个'equals'方法:Object的等于方法

答案 4 :(得分:2)

Object.java src将其equals方法定义为;

 return (this == obj)

所以没有: - )

答案 5 :(得分:1)

是的,null == null为真,但null.equals(null)未定义。

答案 6 :(得分:0)

不,如果没有覆盖equals(),如果对象在内存中是相同的对象,则返回true。

答案 7 :(得分:0)

没有。 object0的实际类(不一定是变量的声明类型)必须覆盖equals()。尝试打印出object0.getClass()。

答案 8 :(得分:0)

以下是Object.equals的源代码:

public boolean equals(Object obj) {
  151           return (this == obj);
  152       }
  153   

所以,不。