equals方法:
- boolean equals(Object obj),使用“程序自己的規則”去判斷兩個是否相等
- ==:判斷兩個基本變量的值是否相等
class Dog { private String DogNo; private String DogCol; public Dog() {} public Dog(String DogNo,String DogCol) { this.DogNo = DogNo; this.DogCol = DogCol; } public boolean equals(Object obj) { //自己和被比較的對象是同一個實例 if(this == obj) { return true; } //用於獲取obj引用對象的類型 if(obj.getClass() == Dog.class) { Dog d2 = (Dog)obj; if(d2 != null && this.DogNo.equals(d2.DogNo)) { return true; } } return false; } } public class EqualsTest { public static void main(String[] args) { System.out.println('A' == 65.0); //true //當比較基本類型的數值時,程序不管數據類型,只比較實際值的大小 System.out.println('0' == 0.0); //false //當比較引用類型的變量(不包括包裝類,因爲包裝類可以自動拆箱),要求被比較的兩個引用變量引用同一個實例時,纔會返回true EqualsTest q1 = new EqualsTest(); //在內存中開闢空間,最終會被回收 EqualsTest q2 = new EqualsTest(); //q1和q2是兩個new出來的不同對象,對象的地址不同 System.out.println(q1 == q2); //false String s1 = new String("hello"); //String重寫了equals方法 String s2 = new String("hello"); System.out.println(s1.equals(s2)); //true Dog d1 = new Dog(); System.out.println(d1.equals(q1)); System.out.println(d1.equals("dash")); Dog dog1 = new Dog("1234","灰色"); Dog dog2 = new Dog("1234","灰色"); System.out.println(dog1.equals(dog2)); //true } }
- 重寫equals方法的標準:
- 如果當前對象和被比較對象,本身就相等,則返回true;
- 要求當前對象與被比較對象的類型相同,關鍵值屬性也相同,則返回true
- 正常重寫equals()方法應該滿足的條件:
- 自反性:對任意x,x.equals(x)一定返回true;
- 對稱性:對於任意x和y,如果y.equals(x)返回true,則x.equals(y)也返回true;
- 傳遞性:對於任意x,y,z,如果x.equals(y)返回true,y.equals(z)返回true,則x.equals(z)一定返回true;
- 一致性:對於任意x和y,如果對象中用於等價比較的信息沒有改變,那麼無論調用多少次x.equals(y),返回結果應該是保持一致的,要麼一致true,要麼一致false;
- 對於任何不適null的x,x.equals(null)
Java之對象的equals方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.