【问题标题】:In which circumstances Java reference equality could be different to equals() equality for an object of a type which has not overridden equals()?在哪些情况下,Java 引用相等性可能不同于未覆盖 equals() 类型的对象的 equals() 相等性?
【发布时间】:2009-05-20 16:00:44
【问题描述】:

是否有任何魔法在任何地方都可能意味着这一点

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

其中 object0 和 object1 都属于某种类型,尚未覆盖 Object.equals()?

【问题讨论】:

    标签: java


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      是的,如果“object0 的类型不覆盖 Object.equals()”,您的意思是特定类型而不是超类。

      如果 object0object1 属于 B 类型,B 扩展 A,并且 A 覆盖 equals(Object obj) 但 B 没有,那么 B 可能不会覆盖 equals(Object obj) 而是 (object0 == object1) != (object0.equals(object1))

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            【解决方案5】:

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

             return (this == obj)
            

            所以没有:-)

            【讨论】:

              【解决方案6】:

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

              【讨论】:

              • @egaga。它被定义为......抛出 NullPointerException!
              【解决方案7】:

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

              【讨论】:

                【解决方案8】:

                这里是 Object.equals 的源代码:

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

                所以,不。

                【讨论】:

                  【解决方案9】:

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

                  object0.getClass()
                  

                  【讨论】:

                    猜你喜欢
                    • 2023-04-09
                    • 2011-07-17
                    • 1970-01-01
                    • 2012-09-08
                    • 2019-06-12
                    • 2012-08-22
                    • 2013-10-27
                    • 1970-01-01
                    相关资源
                    最近更新 更多