在哪些情况下,对于未重写equals()的类型的对象,Java引用相等可能不同于equals()相等?

在哪些情况下,对于未重写equals()的类型的对象,Java引用相等可能不同于equals()相等?,java,Java,有没有什么神奇的东西在任何地方都能说明这一点 (object0 == object1) != (object0.equals(object1)) 其中object0和object1都是未重写Object.equals()?否,如果未重写equals(),则如果对象是内存中相同的对象,则返回true。否,如果未重写equals(),如果对象是内存中相同的对象,则返回true。Object.java src将其equals方法定义为 return (this == obj) 因此no:-)Ob

有没有什么神奇的东西在任何地方都能说明这一点

(object0 == object1) != (object0.equals(object1))

其中object0和object1都是未重写Object.equals()?

否,如果未重写
equals()
,则如果对象是内存中相同的对象,则返回true。

否,如果未重写
equals()
,如果对象是内存中相同的对象,则返回true。

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

 return (this == obj)

因此no:-)

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

 return (this == obj)

因此,否:-)

否。
object0的实际类(不一定是声明的变量类型)必须已重写
equals()
。尝试打印:

object0.getClass()

否。
object0的实际类(不一定是声明的变量类型)必须已重写
equals()
。尝试打印:

object0.getClass()

不,这正是Object的定义

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


不,这正是Object的定义

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


以下是Object.equals的源代码:

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

不,这里是Object.equals的源代码:

public boolean equals(Object obj) {
  151           return (this == obj);
  152       }
  153   
因此,不。

是的,如果“object0
的类型没有覆盖
Object.equals()
”表示的是特定类型,而不是超类

如果
object0
object1
属于类型B,B扩展A,A覆盖
equals(Object obj)
但B不覆盖,那么B可能不覆盖
equals(Object obj)
(object0==object1)!=(object0.equals(object1))

是,如果“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
。除此之外,应该没有明显的差异。

好吧,如果
object0==null
object1==null
,第一个将传递
true
,第二个将传递
NullPointerException
。除此之外,应该没有明显的差异。

尽管对象本身不重写
equals()
方法,但对象的一个超类可能重写
equals()
方法


如果您使用的是eclipse:打开
object.java
文件并按control-o两次。键入“equals”并检查是否只看到一个“equals”方法:对象的equals方法。

虽然对象不重写
equals()
本身,但对象的一个超类可能重写
equals()
方法


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

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

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

@egaga。它被定义为。。。抛出NullPointerException@伊加加。它被定义为。。。抛出NullPointerException!