等于java意外结果

cof*_*eak 0 java

我刚开始学习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)

nne*_*neo 5

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)