關於String建立了多少個對象

String建立對象時系統會自動建立一個字符串緩衝池,在你進行如String str = "a";之類的操做時,系統會先在緩衝池中尋找有沒有,若是沒有就會建立一個。code

String s1 = "abc";
String s2 = "abc";
  • 1
  • 2

建立了一個對象 
因爲s1建立時」abc」字符串已經被放入緩衝池,因此當s2建立的時候是不會產生一個新的對象,他們的引用都會是同一個。對象

String s1 = "abc";
String s2 = new String( "abc" );
  • 1
  • 2

建立了兩個對象 
這裏因爲s2用的是new,因此係統會分配一個新的引用地址給s2不會使用s1的引用地址。字符串

String s1 = "abc";
String s2 = new String( "abc" ).intern();
  • 1
  • 2

建立了一個對象 
這裏因爲使用了intern()方法(調用該方法返回一個字符串,內容與調用該方法的字符串的內容相同,但保證來源於緩衝池中,若是池中沒有於該字符串相同的字符串就將該String對象放入池中,而且返回該對象的引用)編譯

String s1 = "ab"+"c";
  • 1

建立了一個對象 
賦值符號右邊的」a」、」b」、」c」都是常量。對於常量,編譯時就直接存儲它們的字面值而不是它們的引用,在編譯時就直接將它們鏈接的結果提取出來變成了」abc」 ,該語句在class文件中就至關於String s = 「abc」,而後當JVM執行到這一句的時候, 就在String pool(字符串緩衝池)裏找,若是沒有這個字符串,就會產生一個。class

相關文章
相關標籤/搜索