我刚开始学习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?
}
}
Run Code Online (Sandbox Code Playgroud)
Object.equals在Java中相当于==,即它测试引用相等性.由于您的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;
}
Run Code Online (Sandbox Code Playgroud)