1. 程式人生 > >建立字串物件的時候,使用字面值和使用new String()構造器這兩種方式有什麼不同?

建立字串物件的時候,使用字面值和使用new String()構造器這兩種方式有什麼不同?

當我們使用new String構造器來建立字串的時候,字串的值會在堆中建立,而不會加入JVM的字串池中。相反,使用字面值建立的String物件會被放入堆的PermGen段中。例如:

String str=new String(“Test”);

這句程式碼建立的物件str不會放入字串池中,我們需要顯式呼叫String.intern()方法來將它放入字串池中。僅僅當你使用字面值建立字串時,Java才會自動將它放入字串池中,比如:String s=”Test”。順便提一下,這裡有個容易被忽視的地方,當我們將引數“Test”傳入構造器的時候,這個引數是個字面值,因此它也會在字串池中儲存另外一份。想了解更多關於字面值字串和字串物件之間的差別,請看這篇文章。

下圖很好地解釋了這種差異。