一、介绍
Objects.equals方法用于比较两个对象是否相等,相当于字符串的equals方法。
使用该方法需要注意以下几点:
1、不要使用”==“比较两个对象,因为”==”比较的是两个对象的内存地址
Object obj1 = new Object();
Object obj2 = new Object();
boolean isEqual = (obj1 == obj2); //判断是否相等
2、避免使用对象的toString方法进行比较,因为不同的对象toString的结果可能相同
Object obj1 = new Object();
Object obj2 = new Object();
boolean isEqual = (obj1.toString() == obj2.toString()); //判断是否相等
3、使用Objects.equals方法进行比较
Object obj1 = new Object();
Object obj2 = new Object();
boolean isEqual = Objects.equals(obj1, obj2); //判断是否相等
二、Object类型对象的比较
当比较的是Object类型的对象时,Objects.equals方法会先进行类型转换,再根据类型进行比较。如果类型不一致,则返回false。
Object obj1 = new Object();
Object obj2 = new String("hello");
boolean isEqual = Objects.equals(obj1, obj2); // 返回 false
三、数组的比较
当比较的是数组类型时,如果数组元素类型是基本数据类型,则使用Arrays.equals方法进行比较,如果数组元素类型是对象,则使用Objects.deepEquals方法进行比较。deepEquals方法会递归比较数组元素,即数组元素是数组的情况。
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
boolean isEqual = Arrays.equals(arr1, arr2); //返回true
Object[] arr1 = {new Object(), new String("hello"), new int[]{1, 2, 3}};
Object[] arr2 = {new Object(), new String("hello"), new int[]{1, 2, 3}};
boolean isEqual = Objects.deepEquals(arr1, arr2); //返回true
四、自定义对象的比较
当比较自定义对象时,需要在自定义对象中重写equals方法。
public class Person {
private String name;
private int age;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
在重写equals方法时,需要注意以下几点:
1、使用if判断是否为同一个对象,如果是直接返回true
2、使用getClass()方法判断是否为同一个类
3、使用Objects.equals方法比较属性是否相等
五、结论
使用Objects.equals方法进行比较可以保证对象的比较准确性,避免了使用”==”或者toString方法带来的误判。在比较数组对象时,需要使用Arrays.equals和Objects.deepEquals方法进行比较。在自定义对象中,需要重写equals方法以保证对象的比较正确。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/259650.html