1. 程式人生 > 其它 >java_重寫equals()

java_重寫equals()

技術標籤:java

重寫子類的equals()
==和equals的區別?

  • 1.==比較基本資料型別 比較的是值 比如 int a = 20;int b = 30; a == b
  • 2.==比較引用資料型別 比較的是記憶體中的地址
  • 3.equals只能用於比較引用資料型別 因為equals是一個方法 需要使用物件名+點呼叫
  • 4.equals屬於Object類提供的一個方法 本身也是比較地址
  • 若使用equals()方法時,為字串型別,
  • 那麼用的是JDK已經為我們寫好的 重寫的equals方法
  • String類的equals也是重寫Object類的
  • 只不過String類對equals方法進行了改造
  • 比較的是兩個字串的內容 而不是比較地址
/**
 * 	==和equals的區別?
 * 	1.==比較基本資料型別 比較的是值 比如  int a  = 20;int b = 30; a == b
 * 	2.==比較引用資料型別 比較的是記憶體中的地址  
 * 	3.equals只能用於比較引用資料型別 因為equals是一個方法 需要使用物件名+點呼叫 
 * 	4.equals屬於Object類提供的一個方法   本身也是比較地址
 *  若使用equals()方法時,為字串型別,
 *  那麼用的是JDK已經為我們寫好的 重寫的equals方法
 * 	String類的equals也是重寫Object類的
 * 	只不過String類對equals方法進行了改造
 * 	比較的是兩個字串的內容  而不是比較地址 
 *
 */
public class Person { private String name; private String idCard; //屬性封裝 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getIdCard() { return idCard; } public void setIdCard(String idCard) { this.idCard = idCard; } //構造器
public Person() { super(); } public Person(String name) { super(); this.name = name; } public Person(String name, String idCard) { super(); this.name = name; this.idCard = idCard; } @Override // 重寫父類(Object中的equals方法) public boolean equals(Object obj) { /* 型別轉換 自動提升 手動下降 * 即子類 型別轉換為父類,可以自動轉換(子類 是 父類) * 父類轉換為子類,需要(手動)強制轉換 */ if(this == obj) { /* 是同一個物件,地址相同 ,不必再進行如下比較*/ return true; } if(obj instanceof Person) { /* 判斷obj的型別是否為person型別 * 如果是, * 則將obj強制轉換為person型別 * 轉換後才能用getName()和getIdCard() (父類object中沒有這2個方法)*/ Person p = (Person)obj; if((this.getName().equals(p.getName())) && (this.getIdCard().equals(p.getIdCard()))) { /* 當2個屬性都相同時,判斷為這兩個物件相同 * this.getName().equals(p.getName()),this.getName()是一個String型別, * 此時用的是JDK寫好的,對String型別的重寫後的equals()方法, * (String型別是Object的子類,任何型別都是Object型別的子類, * Object類中有一個equals方法,比較的是記憶體地址, * 在String子類中,重寫了父類Object中的equals方法, * 重寫後比較的是字串的內容 * 將字串轉換為字元陣列,逐一進行比較) **/ return true; } } return false; } }

測試



public class Equal {

	public static void main(String[] args) {
		
	Person p1 = new Person("邏輯","412550237");
	Person p2 = new Person("邏輯","412550237");
	
	System.out.println("用==比較的結果:");
	System.out.println(p1 == p2);
	System.out.println("比較的是地址");
	System.out.println("=====================");
	System.out.println("用重寫後的equals方法進行比較:");
	System.out.println(p1.equals(p2));
	
	}
}

結果:
在這裡插入圖片描述