0

我刚开始学习 Java,遇到了 equals。在寻找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

4 回答 4

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;
}
于 2012-10-24T06:09:28.760 回答
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;
}
于 2012-10-24T06:35:15.447 回答
1

这是它的工作原理:

equals是一个Object类方法,你可以override

String课堂上,它已经被覆盖了。

如果你想让你的代码工作,你必须定义你自己的equals方法代码。因为,显然,Object类的代码对类无效sandbox

方法签名为equals

public boolean equals(Object obj);
于 2012-10-24T06:08:33.590 回答
1

==和之间的区别在于equals检查==引用的相等性和equals检查值的相等性。请告诉我,一个对象的价值是什么?这就是结果为假的原因。除非重写equalsofsandbox将调用类equalsObject。您应该重写该equals函数以检查自定义对象之间的相等性。

于 2012-10-24T06:09:27.210 回答