我建立了一个String领域的课程。然后,我创建了两个对象,我也必须使用==运算符对其进行比较.equals()。这是我所做的:
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)); } }
==比较对象引用,它检查两个操作数是否指向同一对象(不是等效对象,是同一对象)。
如果要比较字符串(以查看它们是否包含相同的字符),则需要使用来比较字符串equals。
equals
在你的情况下,如果MyClass字符串匹配,则确实将两个居中实例视为相等,则:
MyClass
public boolean equals(Object object2) { return object2 instanceof MyClass && a.equals(((MyClass)object2).a); }
…但是通常,如果你要定义一个类,那么等效性要比单个字段的等效性强(a在这种情况下)。
旁注:如果你覆盖equals,则几乎总是需要覆盖hashCode。就像在equalsJavaDoc中说的那样:
hashCode
请注意,通常有必要在重写此hashCode方法时重写该方法,以维护该hashCode方法的常规协定,该协定规定相等的对象必须具有相等的哈希码。