我用一个 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));
}
}
编译后,结果显示两次错误。如果两个对象具有相同的字段 - “测试”,为什么它是错误的?
原文由 Fastkowy 发布,翻译遵循 CC BY-SA 4.0 许可协议
==
比较对象引用,它检查两个操作数是否指向同一个对象(不是 等效 对象, 同一个 对象)。如果要比较字符串(查看它们是否包含相同的字符),则需要使用
equals
比较字符串。在您的情况下,如果
MyClass
的两个实例在字符串匹配时确实被认为是相等的,那么:…但是通常,如果您要定义一个类,则等效性不仅仅是单个字段的等效性(在这种情况下为
a
)。旁注:如果您覆盖
equals
,您几乎总是需要覆盖hashCode
。正如equals
JavaDoc 中所说: