2014-06-12 158 views

回答

3
String str= new String("abc").intern() // calling intern() will add the String object to the String pool. 
+3

但是請記住,事後使用'intern'的返回值而不是'new String(「abc」)',否則,您將無法對字符串進行操作! – gexicide

+1

''「abc」.intern()''請。所以字符串不會被創建兩次。 –

+1

@Vakh:但''abc「.intern()'是廢話。無論如何,字符串文字都是實用的。好的,'new String(「abc」)'更糟糕:)。實習'abc'最簡單的解決方案就是''abc''。 – gexicide

1

如果你的對象實際上是new String("abc"),那麼你應該只使用​​,而不是創建一個新的字符串和實習這一塊。無論如何,​​是無所不用的,因爲所有字符串都是。

即低於布爾運算將是真正的

"abc" == new String("abc").intern() 
+0

有道理..「abc」已經被添加到字符串池中。 – TheLostMind

0

好了,你不要一個字符串轉換爲StringPool。 StringPool是由JVM管理的字符串集合。 但是,通過請求虛擬機使用字符串對象的intern()方法(如果它尚未創建爲文字)(否則它已經存在),可以請求包含在池中的字符串

String test= "test".append("Case").append("String"); 
    test.intern(); //string "testCaseString" will be interned 

    String check= "InternString"; 
    check.intern(); //redundant as the string was already interned in the above creation statement 
+0

so intern()不是有用的嗎? – Hitendra

+0

當然,如果您創建或構建您的字符串,或者從您不知道如何創建它的對象中獲取該字符串,那麼它是有用的。 這只是多餘的,如果字符串被創建爲文字 –

+0

好的謝謝你Satyan Raina :) – Hitendra