使用.equals()和==运算符比较两个对象

我用一个字符串字段构造了一个类。然后我创建了两个对象,我必须使用=操作符和.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方法的一般约定,该约定规定相同的对象必须具有相同的哈希代码

发表评论