1. 程式人生 > >"=="和 和 equals 究竟有什麽區別

"=="和 和 equals 究竟有什麽區別

left 結果 區別 bject 兩個人 中一 語句 方法 地址

  ==操作符專門用來比較兩個變量的值是否相等也就是用於比較變量所對應的內存中所存
儲的數值是否相同,要比較兩個基本類型的數據或兩個引用變量是否相等,只能用==操作
符。
  如果一個變量指向的數據是對象類型的,那麽,這時候涉及了兩塊內存,對象本身占用一塊
內存(堆內存),變量也占用一塊內存,例如 Objet obj = new Object();變量 obj 是一個內存,
new Object()是另一個內存,此時,變量 obj 所對應的內存中存儲的數值就是對象占用的那
塊內存的首地址。對於指向對象類型的變量,如果要比較兩個變量是否指向同一個對象,即
要看這兩個變量所對應的內存中的數值是否相等,這時候就需要用==操作符進行比較。
equals 方法是用於比較兩個獨立對象的內容是否相同

,就好比去比較兩個人的長相是否相
同,它比較的兩個對象是獨立的。例如,對於下面的代碼:
  String a=new String("foo");
  String b=new String("foo");
  兩條 new 語句創建了兩個對象,然後用 a/b 這兩個變量分別指向了其中一個對象,這是兩
個不同的對象,它們的首地址是不同的,即 a 和 b 中存儲的數值是不相同的,所以,表達
式 a==b 將返回 false,而這兩個對象中的內容是相同的,所以,表達式 a.equals(b)將返回
true。
  如果一個類沒有自己定義 equals 方法,那麽它將繼承 Object 類的 equals 方法,Object 類
的 equals 方法的實現代碼如下:
boolean equals(Object o){
return this==o;
}
  這說明,如果一個類沒有自己定義 equals 方法,它默認的 equals 方法(從 Object 類繼承
的)就是使用==操作符,也是在比較兩個變量指向的對象是否是同一對象,這時候使用
equals 和使用==會得到同樣的結果,如果比較的是兩個獨立的對象則總返回 false。如果你
編寫的類希望能夠比較該類創建的兩個實例對象的內容是否相同,那麽你必須覆蓋 equals
方法,由你自己寫代碼來決定在什麽情況即可認為兩個對象的內容是相同的。

"=="和 和 equals 究竟有什麽區別