JAVA基礎知識|String a = "abc";String a = new String("abc");


1、String a = "abc";

首先在棧中定義了一個引用變量a,檢查字符串常量池中是否已經存在"abc",如果存在直接將a指向這個地址,注意:指向的是字符串常量池中的地址;

如果字符串常量池中不存在"abc",則進行如下操作:1、在棧中創建三個char型的值'a','b','c',然后在堆中new一個String對象,它的值是剛才在棧中創建的三個char型值組成的數組{'a','b','c'},接着這個String對象會被存放進字符串常量池中,最后將a指向這個對象在字符串常量池中的地址。

String a = "abc";

等效於:

char data[] = {'a', 'b', 'c'};
String a = new String(data);

2、String a =  new String("abc");

首先在棧中定義了一個引用變量a,然后在堆中new一個String對象,a指向這個對象,然后new出來的String對象再指向常量池中的abc。

 3、比較

        String a = "abc";
        String b = "abc";
        String c = new String("abc");
        String d = new String("abc");
        System.out.println(a == b);
        System.out.println(a == c);
        System.out.println(c == d);

執行結果:

true

false

false

注意:new String("abc") 無論字符串常量池中是否存在“abc”,都會在堆中生成一個新的對象,所以a、c、d三者不相等。

以上為個人理解,如果有誤,歡迎指正。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM