(二)java中String str1 = new String("abc")與String str1 = "abc"的區別

大家先來看看下面這段程序:

public class Test{
public static void main(String args[])
{
String str1 = "abc";
String str = "abc;
String str2 = new String("abc");

System.out.println(str1 == str2);
System.out.println(str1.equals(str2));
System.out.println(str == str1);
 }
}

這短代碼的運行結果是:

第一句println輸出的是false;而第二句則輸出的是true;但第三局卻是true;

在這裏很多人會誤認爲第一句應該是true,但事實上卻是false.因爲第一句進行"=="比較的時候比較的是兩個指向,而不是具體指向的內容。而第三句在進行“==”比較的時候同樣比較的是指向,但是他們的指向是相同的。這種現象出現的原因和字符串在內存中實例化的時候有關。
具體情況如下圖所示:

 

當執行第一句Str1 = "abc" 實例化出第一個指向;當進行第二句Str = "abc" 的時候出現第二個指向,因爲堆內存中存在"abc",而且str也沒有new一個新的對象,所以爲了節省內存,str指向了str1所指向的對象;但是第三句的時候出現new語句,他實例化出了一塊新的空間用來盛放"abc",自然str2的指向也也是指向這段新開闢的空間。

 

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