我能理解通过以下方式==
和object.equal(Object obj)
之间的区别是什么? :“==”与“平等(obj对象)”
这是object.equal(Object obj)
返回true
如果两个对象的值是相同的。虽然==
返回true
如果两个类型和值的两个的对象是相同的。
我能理解通过以下方式==
和object.equal(Object obj)
之间的区别是什么? :“==”与“平等(obj对象)”
这是object.equal(Object obj)
返回true
如果两个对象的值是相同的。虽然==
返回true
如果两个类型和值的两个的对象是相同的。
==
返回true,如果引用是完全一样的。
equals(Object)
返回true时,该方法被写入返回true。这可以是同一个对象,一个等同的对象或开发人员想写的东西。
默认实现写成
public boolean equals(Object obj) {
return (this == obj);
}
,所以你可以看到它做同样的事情。
我只是问关于等于(对象obj) – 2012-01-01 18:57:50
的默认实现我会读的源代码,它不是很长,并会立即回答你的问题。 ;) – 2012-01-01 18:59:18
我明白了,谢谢! – 2012-01-01 19:05:40
object.equals(Object obj)
返回true
当对象根据对象的属性相同取决于对象的类型以及该方法是否已经实现时。
==
返回true
当对象的实例是相同的。
java.lang.Object.equals
和==
的默认行为是,如果引用a和b都指向同一个对象,则返回true;否则为假。
如果你想比较值,你必须覆盖等于。这就是String
和其他一些类型所做的。你不是免费的;你必须覆盖从java.lang.Object
的方法。
最佳阅读约书亚布洛赫的“有效的Java” chapter 3,看看如何正确地做到这一点。
那么,这两者有什么区别? – 2012-01-01 18:56:29
+1链接到布洛赫的章节。 – 2012-01-01 19:08:21
'=='总是指引用同一个对象。 “equals”的含义取决于您调用的“equals”方法的对象类型。 – 2012-01-01 19:10:04
的Object.Equals实现是:
public class Object {
public boolean equals(Object obj) {
return (this == obj);
}
}
这将返回true
只有当obj
是完全一样的对象this
。就像Peter Lawrey在他的回答中所说的,任何其他类别的定义equals
完全取决于它是如何编码的。甚至没有要求两个对象是相同的类,甚至没有层次相关的类。
请注意,定义equals
而不定义hashcode
通常被认为是不好的做法。要求两个对象equal
必须返回相同的哈希码。
不错,谢谢。 – 2012-01-01 19:26:09
请注意'=='永远不能改变含义,但'equals()'可以。 – 2012-01-01 19:14:57