【示例1】
public
class
equal
}
【結果】
(1)對於基本資料型別的變數,變數儲存的是值「本身」。而所有關係運算子比較的就是值「本身」,而
int m =3;
int n =
3;
變數n和變數m都是直接儲存的"3"這個數值,所以用==比較的時候結果是true。
(2)對於引用型別變數,引用型別的變數儲存的並不是 「值」本身,而是於其關聯的物件在記憶體中的位址。如:
integer n1 =
newinteger(47
);integer n2 =
newinteger(47
);
引用型別變數n1中儲存的是他所指向的物件在記憶體中的位址,而不是47這個值,同理,n2也是如此。
system.out.
println
(n1 == n2)
;
當執行上面語句時,實際上比較的是n1和n2的引用(其指向的物件在記憶體中的位址)。然而,n1和n2物件的引用卻是不同的,所以輸出false。
equals方法是基類object中的方法,因此對於所有的繼承於object的類都會有該方法。equals()方法是用來比較兩個物件的引用是否相等,即是否指向同乙個物件。但equals()這個方法不適用於基本資料型別,基本型別直接使用==和!=即可。
public
class
equal
}
【結果】
【結果分析】
不是說equals()比較的是引用嘛,那上面結果為什麼對呢?這是因為:
equals()預設確實是比較引用,但是integer類中重寫了equals()方法,使其比較引用物件的內容。兩個引用物件的內容都是47,所以結果是true。
假設你建立了自己的類,沒有重寫equals()方法,如下:
public
class
equal
}
【結果】
【結果分析】
這是由於equals()的預設行為是比較引用,沒有重寫equals()方法,所以它無法比較引用物件的內容,只能預設比較物件的引用,引用不同,所以結果false。
java 與equals的區別
號比較引用型別比較的是位址值是否相同 equals 比較引用型別預設也是比較位址值是否相同,而string類重寫了equals 方法,比較的是內容是否相同。package name public class text02 執行結果為 false true true true 字串如果是變數相加,先開...
java 「 」與 equals()的異同
通俗的講,是看看左右是不是乙個東西。equals是看看左右是不是長得一樣。等於,equals 相同。兩個長得一樣的人,只能說長的相同 equals 但是不等於他們倆是乙個人。你只要記住equals,就不用記了。理論的講,1.是判斷兩個變數或例項是不是指向同乙個記憶體空間 2 equals是判斷兩個變...
java中equals 與 的區別
public class teststring 這個程式真是簡單啊!可是有什麼問題呢?1.來自 string 的憂慮 上面這段程式中,到底有幾個物件呢?可能很多人脫口而出 兩個,s1 和 s2 為什麼?string 是 final 類,它的值不可變。看起來似乎很有道理,那麼來檢測一下吧,稍微改動一下...