Java之對象的equals方法

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方法的標準:
  1. 如果當前對象和被比較對象,本身就相等,則返回true;
  2. 要求當前對象與被比較對象的類型相同,關鍵值屬性也相同,則返回true
  • 正常重寫equals()方法應該滿足的條件:
  1. 自反性:對任意x,x.equals(x)一定返回true;
  2. 對稱性:對於任意x和y,如果y.equals(x)返回true,則x.equals(y)也返回true;
  3. 傳遞性:對於任意x,y,z,如果x.equals(y)返回true,y.equals(z)返回true,則x.equals(z)一定返回true;
  4. 一致性:對於任意x和y,如果對象中用於等價比較的信息沒有改變,那麼無論調用多少次x.equals(y),返回結果應該是保持一致的,要麼一致true,要麼一致false;
  5. 對於任何不適null的x,x.equals(null)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章