介绍
在Java编程中,经常需要比较两个对象是否相等。这时就需要使用到equal方法。equal方法是Object类中的方法,用于比较两个对象是否相等。但是在实际开发中,我们需要根据具体情况对equal方法进行重写。
重写equal方法的原因
因为Object类中的equal方法只是简单地比较两个对象是否是同一对象。这种比较是通过比较两个对象在内存中的存储地址来实现的。而在实际应用中,我们需要比较的通常是两个对象的属性值是否相等。
因此,我们需要在实体类中重写equal方法,以便比较两个实体类对象是否相等。Java中的String和包装类已经重写了equal方法,可以直接使用其equal方法进行比较。
重写equal方法的实现
1、比较两个引用指向的对象是否相等
public class Person { private String name; private int age; // 省略getter和setter方法 // 重写equal方法 @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; if (age != person.age) return false; return name.equals(person.name); } }
2、比较两个对象属性值是否相等
public class Person { private String name; private int age; // 省略getter和setter方法 // 重写equal方法 @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; if (age != person.getAge()) return false; return name != null ? name.equals(person.getName()) : person.getName() == null; } }
注意事项
在重写equal方法时,需要遵循以下注意事项:
1、使用instanceof关键字判断类型是否一致
在进行类型转换时,需要使用instanceof关键字判断类型是否一致以及是否为空。
if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o;
2、使用Objects.equals方法比较属性值是否相等
在比较属性值时,需要使用Objects.equals方法进行比较。这是因为name对象可能为null,如果使用“==”比较将会抛出空指针异常。
if (age != person.getAge()) return false; return Objects.equals(name, person.getName());
小结
equal方法是Java中比较两个对象是否相等的方法,但是在实际开发中需要进行equal方法的重写以便比较两个对象的属性值是否相等。在重写equal方法时需要注意类型转换的问题以及属性值的比较问题。