我的代码看起来有点像这样:
public class EqualityTrial {
public static void main(String[] args) {
// TODO Auto-generated method stub
EqualityTrail1 obj1 = new EqualityTrail1();
obj1.setName("Ankit");
obj1.setAge(23);
EqualityTrail1 obj2 = new EqualityTrail1();
obj2.setName("Ankit");
obj2.setAge(23);
if(obj1 == obj2){
System.out.println("== gave true");
}else{
System.out.println("== gave false");
}
if(obj1.equals(obj2)){
System.out.println("equals gave true");
}else{
System.out.println("equals gave false");
}
}
}
Run Code Online (Sandbox Code Playgroud)
每次条件都是假的.我知道==比较引用是否指向同一个对象,在这种情况下不是那么假是正确的结果但是在'equals'方法的情况下,据我所知它比较两个对象的状态...如果状态同样的方法应该返回true,即使两个对象的状态相同,在这种情况下返回false.我错过了什么吗?
equals仅当您在EqualityTrail1类中使用比较状态的实现覆盖它时才比较状态.如果不覆盖它,则使用默认实现(来自Object类),并且该实现比较引用(因此它的行为将完全相同==).
可能的实施:
public class EqualityTrail1
{
...
@Override
public boolean equals (Object other)
{
if (!(other instanceof EqualityTrail1))
return false;
EqualityTrail1 oet = (EqualityTrail1) other;
return this.name.equals(oet.name) && this.age == oet.age;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1140 次 |
| 最近记录: |