我用一个字符串字段构造了一个类。然后我创建了两个对象,我必须使用=操作符和.equals()对它们进行比较。以下是我所做的:
公共类MyClass{
字符串a;
公共MyClass(字符串ab){
a=ab;
}
公共布尔等于(对象object2){
如果(a==object2){
返回true;
}
否则返回false;
}
公共布尔等式2(对象对象2){
如果(a.equals(object2)){
返回true;
}
否则返回false;
}
公共静态void main(字符串[]args){
MyClass object1=新的MyClass(“测试”);
MyClass object2=新的MyClass(“测试”);
对象1.等于(对象2);
System.out.println(object1.equals(object2));
object1.equals2(object2);
System.out.println(object1.equals2(object2));
}
}
编译后,结果显示两次false。如果两个对象具有相同的字段“test”,为什么为false
=比较对象引用,检查两个操作数是否指向同一对象(不是等效的对象,是相同的对象)
如果要比较字符串(查看它们是否包含相同的字符),则需要使用equals比较字符串
在您的情况下,如果字符串匹配,则认为MyClass的两个实例实际上相等,则:
公共布尔等于(对象对象object2){
返回MyClass&;a.equals的object2实例(((MyClass)object2.a);
}
…但通常,如果定义一个类,那么等价性比单个字段的等价性更重要(a)
旁注:如果覆盖等于,则几乎总是需要覆盖哈希代码。正如equalsJavaDoc中所说:
请注意,每当重写
hashCode方法时,通常需要重写该方法,以便维护hashCode方法的一般约定,该约定规定相同的对象必须具有相同的哈希代码