我一直在尝试使用这个equals()方法和==两个Baby对象,但两个都给了我false.
public class Baby {
String name;
Baby(String myName) {
name = myName;
}
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);
}
}
Run Code Online (Sandbox Code Playgroud)
您的输出是正确的:如果您使用该==操作,则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);
}
}
Run Code Online (Sandbox Code Playgroud)
哦,不要忘记覆盖hashCode(),所以你没有两个对象相同,但有两个不同的hashCodes - 不是犹太教!
| 归档时间: |
|
| 查看次数: |
154 次 |
| 最近记录: |