是否有任何可能意味着
的魔法(object0 == object1) != (object0.equals(object1))
其中object0和object1都是某种类型,它没有覆盖Object.equals()?
答案 0 :(得分:16)
没有。这正是Object的定义。equals()。
...当且仅当x和y引用同一个对象时,此方法才返回true(x == y的值为true)...
public boolean equals( Object o ) {
return this == o;
}
答案 1 :(得分:8)
是的,如果“object0
的类型未覆盖Object.equals()
”,则表示特定类型而非超类。
如果object0
和object1
属于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
所以,不。