首頁>Club>
13
回覆列表
  • 1 # 淘寶客老妖

    String str1 = "ABC";

    String str2 = new String("ABC");

    String str1 = “ABC”;可能建立一個或者不建立物件,如果”ABC”這個字串在java String池裡不存在,會在java String池裡建立一個建立一個String物件(“ABC”),然後str1指向這個記憶體地址,無論以後用這種方式建立多少個值為”ABC”的字串物件,始終只有一個記憶體地址被分配,之後的都是String的複製,Java中稱為“字串駐留”,所有的字串常量都會在編譯之後自動地駐留。

    String str2 = new String(“ABC”);至少建立一個物件,也可能兩個。因為用到new關鍵字,肯定會在heap中建立一個str2的String物件,它的value是“ABC”。同時如果這個字串再java String池裡不存在,會在java池裡建立這個String物件“ABC”。

    在JVM裡,考慮到垃圾回收(Garbage Collection)的方便,將heap(堆)劃分為三部分:young generation(新生代)、tenured generation (old generation)(舊生代)、permanent generation(永生代)。

    字串為了解決字串重複問題,生命週期長,存於pergmen中。

    JVM中,相應的類被載入執行後,常量池對應的對映到JVM執行時的常量池中。

    考慮下面的問題:

    String str1 = new String("ABC");

    String str2 = new String("ABC");

    str1 == str2的值是true還是false呢?false

    String str3 = "ABC";

    String str4 = "ABC";

    String str5 = "AB" + "C";

    str3 == str4 //true

    str3 == str5 // true

    String a = "ABC";

    String b = "AB";

    String c = b + "C";

    System.out.println( a == c );//false

    a、b在編譯時就已經被確定了,而c是引用變數,不會在編譯時就被確定。

  • 中秋節和大豐收的關聯?
  • 跟處女男談了三年,開始是他主動追的,三年來被他分手好幾次,在我快要放棄的時候又來找我,是不是渣男?