对象相等的方法?

时间:2011-07-14 20:33:13

标签: java

以下是用javadocs编写的

  

类Object的equals方法实现最具辨别力   对象可能的等价关系;也就是说,对于任何非null   引用值x和y,当且仅当x时,此方法返回true   和y引用相同的对象(x == y的值为true)。

是否表示object1.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.myBar.equals(dFoo.myBar)=>真的

2 个答案:

答案 0 :(得分:6)

equals的默认实现与==

相同

但是,通常的做法是覆盖此方法并为其提供一个实现,其中如果类型和内容相同,则两个对象相等。当==成立时,它应该始终为真。

答案 1 :(得分:0)

不,o1.equals(o2)应该在o1 == o2为真时返回true,但在其他情况下也可以返回true。

如果o1和o2引用相同的对象,即同一块内存,则

o1 == o2返回true。

然而,我们常常对两个对象是否基于其属性而不是它们在内存中的位置感兴趣。例如,如果我执行new String("Hello World")两次,那么两个字符串 基于它们所代表的字符序列相同,但它们不是相同的对象存储器中。

JavaDocs正在谈论equals()类本身提供的Object的实现,当==运算符返回true时返回true。当您创建对象的子类时,您可以重新实现equals方法以提供上述类型的相等。