0

私は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

4 に答える 4

5

Object.equalsJava では と同等==です。つまり、参照の等価性をテストします。あなたの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チェックし、値の等価性をチェックすることです。教えてください、オブジェクトの値は何ですか? そのため、結果は false です。オーバーライドされない限り、 of はクラスequalssandboxを呼び出します。カスタムオブジェクト間の同等性をチェックするには、関数をオーバーライドする必要があります。equalsObjectequals

于 2012-10-24T06:09:27.210 に答える