我刚开始学习Java并遇到了平等。在寻找equals和==之间的差异后,我决定自己练习但是我没有得到预期的结果。这是代码:
public class Sandbox {
/**
* @param args
*
*/
private int a;
public void setAtta(int value){a=value;}
public int getAtta(){return a;}
public static void main(String[] args) {
// TODO Auto-generated method stub
Sandbox s = new Sandbox();
s.setAtta(10);
Sandbox s1 = new Sandbox();
s1.setAtta(10);
System.out.println(s==s1);//false- EXPECTED
System.out.println(s.equals(s1));//false- I thought it should be true?
}
}
答案 0 :(得分:5)
Object.equals
等同于==
,即它测试引用相等性。由于您的Sandbox
类(隐式)延伸Object
,并且您未覆盖equals
,s.equals(s1)
会调用Object.equals
。
要获得所需的行为,请向您的班级添加equals
方法(覆盖):
public boolean equals(Object obj) {
if(this == obj) return true;
if(!(obj instanceof Sandbox)) return false;
Sandbox that = (Sandbox)obj;
return this.a == that.a;
}
答案 1 :(得分:2)
equals() method in object class, just use == comparison behind the screen. So you got it as false. So you need to override it and give your implementation as needed.
public boolean equals(Object o){
if(o instanceof SandBox){
if(((SandBox)o).a==this.a){
return true;
}
}
return false;
}
答案 2 :(得分:1)
这是它的工作原理:
equals
是一种Object
类方法,您可以override
。
在String
课程中,它已被覆盖。
如果您希望使用代码,则必须定义自己的equals
方法代码。因为,Object
类的代码显然对sandbox
类无效。
equals
的方法签名是:
public boolean equals(Object obj);
答案 3 :(得分:1)
==
和equals
之间的区别在于==
检查引用中的相等性,equals
检查值的相等性。请告诉我,一个物体的价值是多少?这就是为什么结果是错误的。除非被覆盖,equals
的{{1}}将调用sandbox
类的equals
。您应该覆盖Object
函数以检查自定义对象之间的相等性。