Java &引用==&引用;vs";相等(对象obj)“;

Java &引用==&引用;vs";相等(对象obj)“;,java,Java,我可以用以下方式理解=和object.equal(object obj)之间的区别吗 这就是object.equal(object obj)如果两个对象的值相同,则返回true。而=如果两个对象的类型和值相同,则返回真值。对象等于(对象obj)根据对象的属性(取决于对象的类型)以及是否实现了该方法,当对象相同时,返回true 当对象的实例相同时,=返回true。java.lang.object.equals和=的默认行为是,如果引用a和b都指向同一对象,则返回true;否则就错了 如果希望比较值

我可以用以下方式理解
=
object.equal(object obj)
之间的区别吗

这就是
object.equal(object obj)
如果两个对象的值相同,则返回
true
。而
=
如果两个对象的类型相同,则返回
真值

对象等于(对象obj)
根据对象的属性(取决于对象的类型)以及是否实现了该方法,当对象相同时,返回
true


当对象的实例相同时,
=
返回
true

java.lang.object.equals和
=
的默认行为是,如果引用a和b都指向同一对象,则返回true;否则就错了

如果希望比较值,则必须重写等于。这就是
String
和其他一些类型所做的。你不是免费得到的;您必须重写
java.lang.Object
中的方法


最好阅读Joshua Bloch的“有效Java”,看看如何正确地使用它。

==
如果引用完全相同,则返回true

equals(Object)
在写入方法以返回true时返回true。这可以是同一个对象,一个等价的对象,或者开发人员想要写的东西

默认实现编写为

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

因此,您可以看到它做了同样的事情。

Object.equals的实现是:

public class Object {
    public boolean equals(Object obj) {
        return (this == obj);
    }
}
只有当
obj
This
的对象完全相同时,才会返回
true
。就像Peter Lawrey在他的回答中所说的那样,
对于任何其他类的定义都等于
,这完全取决于它是如何编码的。甚至不要求两个对象是同一个类,或者甚至是层次结构相关的类


请注意,定义
等于
而不定义
hashcode
通常被认为是不好的做法。有一个要求,两个
相等的对象必须返回相同的散列码。

您能解释一下“相同”是什么意思吗?相同的类类型和相同的值?这取决于您调用的
等于的类是否实际实现了该方法。在<代码>字符串中,将逐个比较所有字符,如果它们是相同的返回真值。可以考虑类似的方法,用于字符串比较,= =用于检查对象标识(对象位置)!!那么,这两者的区别是什么呢?
==
总是指引用同一个对象。
equals
的含义取决于调用其
equals
方法的对象的类型。因为某些对象,如字符串和数字,已经覆盖了equals。如果不重写equals,那么我的语句对于您编写的对象是正确的。我只是询问equals的默认实现(Object obj)。我会阅读源代码,它不会很长,并且会立即回答您的问题。;)如果您不知道如何轻松找到源代码,通常可以在IDE中查找。请注意,
=
永远不会改变其含义,但
equals()
可以。