gpt4 book ai didi

java - 包装对象和平等

转载 作者:行者123 更新时间:2023-12-01 05:19:55 27 4
gpt4 key购买 nike

为什么如果我在两个包装对象上运行 .equals 方法,它将根据下面的 WrapperEqualsEquals 类返回 true 但是(我强调但是)为什么我们需要重写下面 Blob 类中的 equals 方法,使其返回 true。基本上,为什么包装器对象必须重写 .equals 方法?

    class WrapperEqualsEquals
{
public static void main(String []args)
{
Integer one=new Integer(1);
Integer oneB=new Integer(1);

System.out.println(one == oneB);
System.out.println(one.equals(oneB));

}

}

    class OverrideEquals
{
public static void main (String [] args)
{
Blob a= new Blob(1,"a");
Blob b= new Blob(1,"a");



System.out.println(a==b);
System.out.println(a.equals(b));

}

}

    class Blob
{
int blobNumber;
String blobText;

Blob(int blobNumber,String blobText)
{
this.blobNumber=blobNumber;
this.blobText=blobText;
}

//"overriding" the 'equals' method

public boolean equals (Object o)
{

if (o instanceof Blob)
{
Blob o2=(Blob)o;
return ((o2.blobNumber==this.blobNumber) &&(o2.blobText==this.blobText))?
true:false;
}

else
{
return false;
}
}

}

最佳答案

默认情况下,仅当隐式参数和显式参数的哈希码相等时,Object#equals(Object) 才返回 true。因为您创建了两个单独的 Blob 对象,所以它们不会指向相同的引用(根据 hashCode()),因此使它们不相等,除非 .equals 方法被重写。但是,根据 Java 约定,只有当两个对象的哈希码相等时,.equals 才应返回 true,因此您可能还希望重写 hashCode。这也将保留内存使用。

关于java - 包装对象和平等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10588588/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com