出力は正しいです。操作を使用する場合、s1 は実際には s2 と等しくありません。 ==
これらは別個のインスタンスであるためです。これはまさに==
チェック対象です。Baby は equals メソッドをオーバーライドしないため、これを呼び出すとデフォルトで==
操作が行われ、false が返されます。代わりに、クラスでメソッドをオーバーライドし、public boolean equals(Object o)
必要に応じて呼び出す必要があります。
public class Baby {
String name;
Baby(String myName) {
name = myName;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Baby other = (Baby) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
public static void main(String[] args) {
Baby s1 = new Baby("a");
Baby s2 = new Baby("a");
System.out.println(s2.equals(s1));
System.out.println(s1 == s2);
}
}
ああ、オーバーライドすることも忘れないでくださいhashCode()
。そうすれば、2 つのオブジェクトが等しくても、2 つの異なる hashCode を持つことはありません。コーシャではありません!