首頁  >  文章  >  Java  >  java引用變數的相等和物件的相等

java引用變數的相等和物件的相等

巴扎黑
巴扎黑原創
2016-12-02 09:34:461849瀏覽

java常使用「==」和equals()方法來判斷物件是否相等,以下就來說下怎麼判斷兩個物件相等。 
每個在堆上的對像都會有它的引用變量,如果沒有引用變量引用的對象,堆上的GC回來找它聊天的。
「==」的比較,符號兩邊都是物件的引用變量,如果比較回傳true的話,那就表示符號兩邊的引用變數引用的是同一個對象,因為「==」比較的是引用變數內的值,所以「==」比較就是引用比較。 
但是如果是比較兩個不同物件在意義上是否相同的呢?例如兩個Student對象,對象的實例變數name,sex都一樣,我們能否認為它們是兩個相等的對象。 
equals()方法 
這就要用到equals()方法,首先我們要知道的是equals()方法是Object這個所有類別的父類別中就被定義了。在Object中equals的比較方式跟「==」類似,也是只有比較的兩個物件為同一個物件時才會回傳true,否則都會回傳false。所以我們在類別中就會重寫equals()方法來完成堆上兩個不同物件在意義上是否相同,在重寫equals()方法之前我們還要重寫hashcode()方法,因為我們再呼叫equals ()方法的時候,它會先將兩個物件的hashcode()返回的值進行比較,如果不相同就會返回false,我以我們在重寫hashcode()方法時會讓同類的所有物件都返回一個相同的hashcode值,透過在hashcode()方法中宣告一個result變數值,例如, 
[code=”java”]public int hashCode() {  
      int result=17; =null?name.hashCode():0;  
      result=31*result+region!=null?region.hashCode():0;  
   ;  
      return result;  
}  
接著回到equals()方法判斷兩個物件的實例變數是否相同,如果相同則是equals()方法傳回true,如果實例變數不同則會傳回false 寫equals()方法,需要看具體的類,因為每個類別的實例變數都不同,(新建一個物件的話如果沒有特殊的建構函數,實例變數會有預設值,所以新建的兩個不同類型也是相等的,因為實例變數都是預設值即相同)。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn