Object類中equals方法和toString方法的重寫問題

(week6-Saturday)

Object類

1、Object類概述(具體查看API文檔)
         Object類是所有類的父類
         若一個類未使extends明確標識繼承關係,會默認繼承Object類(包括數組)
         Java中每個類都可以用Object類定義的方法
   
2、Object類中的equals方法toString方法
     說明:Object類中定義的"equals方法"和"toString方法"往往不能滿足我們所想要的邏輯需求,需要我們自行在需要調用該方法的類中對"equals方法"和"toString方法"進行方法重寫


----2.1 equals方法
   1、先看一下API文檔中關於Object類中"equals"方法的說明:
       該equals類方法Object實現對象上差別可能性最大的相等關係; 也就是說,對於任何非空參考值x和y,
   當且僅當x和y引用相同對象(x == y具有值true)時,該方法返回true 。


   2、於是涉及到equals方法與"=="的關係:
       對於兩個對象,當這兩個對象指向同一塊內存空間時,這兩個對象纔可用"=="連接,否則會返回false, 而未經過重寫的equals方法與"=="的效果相同。
   
   3、equals方法重寫(重點)
我們常常需要判斷的是兩個對象中的元素值是否完全相同,因此我們需要在類中重寫equals方法的邏輯判斷,使其滿足我們的需求   

   

                重寫如下(在自定義類Speciality中對其進行重寫):

               /**
		 * 重寫Object類中的equals方法
		 * @param object
		 * @return
		 */
		public boolean equals(Object object){
			if(object == this){
				return true;
			}
			if(object instanceof Speciality){
				Speciality speciality = (Speciality) object;//強制轉換
				if(this.getName()==speciality.getName()&&this.getYear()==speciality.getYear()
						&&this.getNumberId()==speciality.getNumberId()){
					return true;
				}
			}
			return false;
		}


----2.2 toString方法

   1、API文檔中關於toString方法的說明:
      該toString類方法Object返回一個由類的名稱,其中所述對象是其實例,該符號字符`的字符串@ ”,並且對象的哈希碼的無符號的十六進制表示。
   換句話說,這個方法返回一個等於下列值的字符串: getClass().getName() + '@' + Integer.toHexString(hashCode())
   

   2、對象直接調用原Object類中的toString方法時,輸出的是一串地址字符串直接調用該方法輸出的還是字符串,因此需要在類中重寫Object方法使得能夠以字符串的形式輸出類中的元素值。

           3、總結(在調用輸出函數的基礎上):
  3.1、輸入對象名時,默認直接調用類中的toString方法
  3.2、字符串變量繼承Object類中的toString方法,輸出的是對象的字符串表現形式
  3.3、子類可以重寫toString方法改變輸出的表現形式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章