当我比较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;
}
}