我一直在尝试使用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);
}
}
答案 0 :(得分:7)
您的输出是正确的:如果您使用==
操作,则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()
,所以你没有两个对象相同但有两个不同的hashCodes - 不是犹太教徒!
答案 1 :(得分:2)
s1 == s2
和true
是相同的对象, s1
将仅评估为s2
。他们不在你的情况下。虽然内容可能相同,但它们是不同的对象。
.equals
方法(如果正确实施;这是你的工作)比较内容,因此,在你的情况下,将返回true
。
答案 2 :(得分:0)
除非你重写equals,否则它会告诉你s1和s2确实是不同的对象。他们是两个不同的婴儿,恰好有相同的名字。 :)
答案 3 :(得分:0)
请参阅此问题:What is the difference between == vs equals() in Java?
解释了==
与使用.equals()
方法之间的区别。