【发布时间】:2009-05-20 16:00:44
【问题描述】:
是否有任何魔法在任何地方都可能意味着这一点
(object0 == object1) != (object0.equals(object1))
其中 object0 和 object1 都属于某种类型,尚未覆盖 Object.equals()?
【问题讨论】:
标签: java
是否有任何魔法在任何地方都可能意味着这一点
(object0 == object1) != (object0.equals(object1))
其中 object0 和 object1 都属于某种类型,尚未覆盖 Object.equals()?
【问题讨论】:
标签: java
没有。这正是 Object.equals() 的定义。
...当且仅当 x 和 y 引用同一个对象(x == y 的值为 true)时,此方法才返回 true ...
public boolean equals( Object o ) {
return this == o;
}
【讨论】:
是的,如果“object0 的类型不覆盖 Object.equals()”,您的意思是特定类型而不是超类。
如果 object0 和 object1 属于 B 类型,B 扩展 A,并且 A 覆盖 equals(Object obj) 但 B 没有,那么 B 可能不会覆盖 equals(Object obj) 而是 (object0 == object1) != (object0.equals(object1))。
【讨论】:
好吧,如果object0 == null 和object1 == null,第一个将提供true,第二个将提供NullPointerException。除此之外,应该没有明显的差异。
【讨论】:
虽然对象本身不会覆盖equals(),但对象的超类之一可能会覆盖equals() 方法。
如果您使用的是 eclipse:打开 object.java 文件并按两次 control-o。输入 'equals' 并检查你是否只看到一个 'equals' 方法:Object 的 equals 方法。
【讨论】:
Object.java src 将其 equals 方法定义为;
return (this == obj)
所以没有:-)
【讨论】:
是的,null == null 为真,但未定义 null.equals(null)。
【讨论】:
不,如果equals() 未被覆盖,如果对象是内存中相同的相同对象,则返回true。
【讨论】:
这里是 Object.equals 的源代码:
public boolean equals(Object obj) {
151 return (this == obj);
152 }
153
所以,不。
【讨论】:
没有。 object0 的实际类(不一定是变量的声明类型)必须覆盖equals()。尝试打印出来:
object0.getClass()
【讨论】: