有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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)=>;真的


共 (2) 个答案

  1. # 1 楼答案

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

    o1 == o2如果o1和o2引用同一个对象,即同一块内存,则返回true

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

    JavaDocs讨论的是由Object类本身提供的equals()的实现,当==操作符返回true时,它返回true。当您创建object的子类时,可以重新实现equals方法来提供上面描述的那种相等

  2. # 2 楼答案

    equals的默认实现与==相同

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