等于java意外结果

时间:2012-10-24 06:05:38

标签: 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?


}

}

4 个答案:

答案 0 :(得分:5)

Java中的

Object.equals等同于==,即它测试引用相等性。由于您的Sandbox类(隐式)延伸Object,并且您未覆盖equalss.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函数以检查自定义对象之间的相等性。