string對象建立個數

開發工具:eclipse-jee-kepler-SR1-win32 eclipse

原始代碼: jvm

public class StringTest { 工具

 public static void main(String[] args) {
  String s1 = "a"+"b"+"c";
  String s2 = new String("a")+new String("b")+new String("c");
  String s3 = "a"+"b"+new String("c");
  String s4 = new String("a")+"b"+"c";
 }
} 開發工具

 

反編譯工具(jd-gui)查看生成的class文件: 優化

public class StringTest
{
  public static void main(String[] args)
  {
    String s1 = "abc";
    String s2 = new String("a") + new String("b") + new String("c");
    String s3 = "ab" + new String("c");
    String s4 = new String("a") + "b" + "c";
  }
} ui

 

百度了一下。 對象

對於String s = new String("a")生成的對象數是兩個應該沒有問題。一個是堆中生成的"a"對象,一個是字符串常量池中的"a"。至於一個指向字符串"a"的引用對象s的這種說法我以爲應該是錯的,對象的引用是在棧中存放,引用應該不是一個對象;若是這種說法成立,能夠推導出只要使用new關鍵字建立對象,都是建立了2個對象,這明顯不合理! ip

 

String s = "a" + "b" +"c" 就這種寫法,就我貼出的代碼能夠發現。編譯編譯時進行了優化,最後是String s = "abc"。String s = "a" + "b" +"c"這種寫法最後其實只生成了一個對象,而不是"a","b","c","ab","abc"五個對象.其餘組合狀況也能夠對照着看一下! 開發

 

至於上述代碼時候會應爲jvm不一樣而致使編譯後的結果不一樣,我還沒能研究到那裏去,若有高手但願能告知一下! 字符串

相關文章
相關標籤/搜索