2019獨角獸企業重金招聘Python工程師標準>>>
###String 簡介
String 并非java的8大基本數據類型之一。
java中基本數據類型存儲在棧內存中。而String不是,新new的String 對象存儲在堆內存中。而字符串存儲在常量池中。String對象的引用存儲中棧內存中。
String的實例化方式
String對象有兩種實例化方式
String str1 = new String("ABC"); //第一種String str2 ="ABC"; //第二種
第一種new的方式:javap反編譯的結果為
0: ldc #2 // String ABC2: astore_1 3: new #3 // class java/lang/String6: dup 7: invokespecial #4 // Method java/lang/String."<init>":()V
整個過程大致可解釋為:
- a. 常量池中創建常量 'ABC';
- b. 棧內存中創建引用
- c. 堆內存中新建String對象,再初始化。
而第二種直接賦值的方式虛擬機運行的結果如下:
0: ldc #2 // String ABC2: astore_1
這里可以很清楚的看出,直接在常量池中創建‘ABC’字符串,指向引用str2
由此可以看出第二種方式明顯比第一種更高效。 其實經過測試:
String s = new String("ABC");//等價于下面兩步(唯一的區別就是在棧中多了一個指向'ABC'的引用s1)String s1 ="ABC";String s2 = new String(s1);