我创造了课程A.然后我创建了两个类对象A.
A a1=new A(5);
A a2=new A(5);
Run Code Online (Sandbox Code Playgroud)
然后,如果我尝试使用equals方法比较对象,它返回false.
if (a1.equals(a2)) // ->false
Run Code Online (Sandbox Code Playgroud)
在同样的情况下,如果我使用包装类
Integer i1=new Integer(5);
Integer i2=new Interger(5);
if (i1.equals(i2)) // ->returns true
Run Code Online (Sandbox Code Playgroud)
为什么?谁能解释一下?
您必须覆盖equals()类中的方法A.默认情况下,它使用从Object类继承的实现,即Object#equals()来比较引用,即如果两个对象都是驻留在堆中的同一对象,则返回true或者否则false.如果需要检查对象内容是否相等,请覆盖equals()类中的方法.
注:这通常是一个很好的做法,以覆盖hashCode()方法,而overidding equals().
我提供了一个示例实现:
class A {
private int value ;
A(int value) {
this.value = value;
}
@Override
public boolean equals(Object obj) {
if(obj==null || !(obj instanceof A)){
return false;
}
return this.value==((A)obj).value;
}
@Override
public int hashCode() {
return this.value;
}
}
Run Code Online (Sandbox Code Playgroud)
Integer类已经覆盖了这个方法,Integer#equals().
将此对象与指定的对象进行比较.当且仅当参数不为null并且是包含与此对象相同的int值的Integer对象时,结果才为真.
推荐阅读:
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |