与方法equal()的比较



当我比较java中相同类型类的两个实例时,它们的属性值相同,为什么我得到假?我是OOP的新手,不懂一些OOP的逻辑。

public static void main(String[] args) {
Object o1= new Object(24,"Omar");
Object o2= new Object(24,"Omar");
System.out.println(o1.equals(o2));
}

equals方法当且仅当o1和o2引用同一对象时返回true。如果要与成员变量进行比较,则需要在自定义类中重写equals方法,如下所示:

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
CustomObjClass obj = (CustomObjClass) o;
return age == obj.age && Objects.equals(name, obj.name);
}

对于下面的代码,它将返回true:

CustomObjClass o1= new CustomObjClass(24,"Omar");
CustomObjClass o2= new CustomObjClass(24,"Omar");
System.out.println(o1.equals(o2)); // return true

默认情况下,相等操作符将验证两个对象是否为同一对象。因此,例如,如果我们执行以下操作:

Object o1= new Object(24,"Omar");
Object o2= o1
System.out.println(o1.equals(o2));

会得到真值,因为o2和o1是同一个对象。在您的示例中,您有两个具有相同内容的不同对象(因为您使用"new"实例化了它们)。因此,相等运算符返回false。如果你想让它返回true,你必须重写等号操作符并实现你自己的逻辑。

equals方法的默认实现使用==操作符比较两个对象的引用。你可以在这里找到详细信息。如果您想比较Class的值,请覆盖equals方法。

例子:

public class TestClass {
private int age;
private String name;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof TestClass)) return false;
TestClass testClass = (TestClass) o;
return getAge() == testClass.getAge() && Objects.equals(getName(), testClass.getName());
}
@Override
public int hashCode() {
return Objects.hash(getAge(), getName());
}
public TestClass(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

相关内容

  • 没有找到相关文章

最新更新