gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 00:54:47 25 4
gpt4 key购买 nike

我用一个 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 the hashCode method, which states that equal objects must have equal hash codes.

关于java - 使用 .equals() 和 == 运算符比较两个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41846927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com