您的输出是正确的:如果您使用该操作,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()
,这样你就没有两个对象相等但有两个不同的哈希码——不是犹太洁食!