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()
可以。