この質問は 2 つに分けるべきかもしれませんが、最初の質問は非常に単純.equals()
です。ここで説明されているように、 == は2つの参照が同じオブジェクトを指している.equals()
かどうかをチェックし、パラメーターの値が同じかどうかをチェックすると思いました:
http://www.coderanch.com/t/409507/java/java/Difference-等しい
しかし、私はこれを実行しようとしました:
public class EqualsTest {
public static void main(String[] args) {
Integer i1 = new Integer(1);
Integer i2 = new Integer(1);
System.out.println(i1.equals(i2));
Nested n1 = new Nested();
Nested n2 = new Nested();
n1.i = i1;
n2.i = i2;
System.out.println(n1.equals(n2));
}
}
class Nested {
Integer i;
}
そして、私は出力として得ます:
true
false
Javadoc http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html#equals(java.lang.Object)を読むと予想どおり
したがって、私の理解では、.equals()
== と異なるようにするには、オーバーライドする必要があります。右?
私の 2 番目の質問は、メソッド .equals() をオーバーライドせずに、クラスのオブジェクトを<A>
一意にする ( を呼び出すときに自動的にオーバーライドされるadd()
)方法はありますか?Set<A>
<A>