我用一个 String
字段构建了一个类。然后我创建了两个对象,我还必须使用 ==
运算符和 .equals()
来比较它们。这是我所做的:
public class MyClass {
String a;
public MyClass(String ab) {
a = ab;
}
public boolean equals(Object object2) {
if(a == object2) {
return true;
}
else return false;
}
public boolean equals2(Object object2) {
if(a.equals(object2)) {
return true;
}
else return false;
}
public static void main(String[] args) {
MyClass object1 = new MyClass("test");
MyClass object2 = new MyClass("test");
object1.equals(object2);
System.out.println(object1.equals(object2));
object1.equals2(object2);
System.out.println(object1.equals2(object2));
}
}
编译后显示两次 false 作为结果。如果两个对象具有相同的字段 - “测试”,为什么它是假的?
最佳答案
==
比较对象引用,它检查两个操作数是否指向同一个对象(不是等价对象,相同对象)。
如果你想比较字符串(看它们是否包含相同的字符),你需要使用equals
来比较字符串。
在您的情况下,如果字符串匹配,则 MyClass
的两个实例确实被认为是相等的,那么:
public boolean equals(Object object2) {
return object2 instanceof MyClass && a.equals(((MyClass)object2).a);
}
...但通常,如果您正在定义一个类,则等效性不仅仅是单个字段的等效性(在本例中为 a
)。
旁注:如果您覆盖 equals
,您几乎总是需要覆盖 hashCode
.正如它在 equals
JavaDoc 中所说的那样:
Note that it is generally necessary to override the
hashCode
method whenever this method is overridden, so as to maintain the general contract for thehashCode
method, which states that equal objects must have equal hash codes.
关于java - 使用 .equals() 和 == 运算符比较两个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41846927/