一、介紹
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/zh-tw/n/259650.html