java equals與==

在java中equals比較的是內容,值是否相等,==比較的是地址是否相同。

對於引用變量,引用類型的變量在棧中僅僅是存儲引用類型變量的地址,而其本身內容則存儲在堆中。

equals比較的是堆裏的值,==則比較的是引用的地址,棧中的值 。

對於基本類型,char,int等只要比較他們的值是否相同就可以,但是他們封裝的類就要另外考慮了。

這裏主要想說的是String類型。

		String a = "Man";
		String b = "Man";
		String sa = new String("Man");
		String sb = new String("Man");
		System.out.println(a==b);                 //true
		System.out.println(sa == sb);	          //false
		System.out.println(sa.equals(a));         // true
		System.out.println(sa.equals(sb));        //true
在運行a==b時返回的是true,而sa == sb時返回的是false

主要原因是sa和sb是對象引用,需要比較的是他們的地址,他們的值在堆中,sa,sb保存的是地址。

而a和b則是因爲有字符串緩衝池的緣故。

字符串緩衝池:

程序在運行的時候會創建一個字符串緩衝池 當使用 b = "Man" 這樣的表達是創建字符串的時候,程先會 
在這個String緩衝池中尋找相同值的對象,在第一個程序中,
a先被 放到了池中,所以在b被創建的時候,程序找 到了具有相同值的 a, 將 b 引用 a 所引用的對象"Man"; 
使用了 new 操作符
,他明白的告訴程序: “我要一個新的!不要舊的!”與是一個新的"Man"Sting對象被創 
建在內存中。他們的值相同,但是位置不同





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