java对象相等方法?
下面是用javadocs编写的
The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any non-null reference values x and y, this method returns true if and only if x and y refer to the same object (x == y has the value true).
这是否意味着反对1。equals(object2)仅在object1==object2时返回true
下面的示例位于In Java, what is a shallow copy?
class Foo { private Bar myBar; ...
public Foo shallowCopy() {
Foo newFoo = new Foo(); newFoo.myBar = myBar; return newFoo; }
public Foo deepCopy() { Foo newFoo = new Foo(); newFoo.myBar = myBar.clone(); //or new Bar(myBar) or myBar.deepCopy or ... return newFoo; } } Foo myFoo = new Foo();
Foo sFoo = myFoo.shallowCopy();
Foo dFoo = myFoo.deepCopy();
myFoo.myBar == sFoo.myBar => true
myFoo.myBar.equals(sFoo.myBar) => true
myFoo.myBar == dFoo.myBar => false
myFoo.myBar.equals(dFoo.myBar) => true
如果第一次理解是正确的,那么myFoo怎么会这样呢。我的酒吧。等于(dFoo.myBar)=>;真的
# 1 楼答案
否,
o1.equals(o2)
在o1 == o2
为true时应返回true,但在其他情况下也可以返回trueo1 == o2
如果o1和o2引用同一个对象,即同一块内存,则返回true然而,我们经常感兴趣的是,除了它们在内存中的位置之外,两个对象是否基于它们的属性而相同。例如,如果我执行
new String("Hello World")
两次,那么根据它们所代表的字符序列,这两个字符串是相同的,但它们在内存中不是相同的对象JavaDocs讨论的是由
Object
类本身提供的equals()
的实现,当==
操作符返回true时,它返回true。当您创建object的子类时,可以重新实现equals方法来提供上面描述的那种相等# 2 楼答案
equals的默认实现与
==
相同然而,通常的做法是重写此方法,并为其提供一个实现,如果类型和内容相同,则两个对象相等。当
==
为真时,它应该始终为真