2016-07-07 30 views
-2

我知道我們什麼時候使用String s = new String("abc"); JVM會在堆中創建對象,當我們使用String s = "abc";時,會在String常量池中創建對象。什麼時候去換新字符串而不是java中的字符串文字

IMO,使用String s = "abc";服務我們的目的。在這種情況下,我們必須去尋找new String("abc");

+0

當你不想要字符串被緩存或它是一個很長的字符串 – Azodious

+0

@Azodious但你仍然在任何情況下創建字符串。 –

+0

這是意見還是問題?因爲如果這是一個問題,關於如何以及爲什麼創建對象(而不僅僅是字符串)的信息已經足夠多了。 – durbnpoisn

回答

2

從字符串文字中創建一個新的String對象是不必要的 - 事實上,這是不必要的低效。

String對象是不可變的,所以你永遠不必做一個String對象的防禦副本。

+0

我可以想到一些奇怪的角落情況下,你確實想要不同的實例相同的字符串... – assylias

+0

@ assylias請展開:) –

+0

@AndyTurner說你發送一個查詢到其餘的WS和查詢參數需要存儲在一張地圖中,因爲編寫不好的API迫使你發送一個列表,並且你想發送一個列表(server/ws?abc = 1&abc = 2&abc = 3),你可以構建一個IdentityHashMap和'map.put(new String(「 abc「),1); map.put(new String(「abc」),2); etc.'。我堅持我最初評論的「奇怪」一點。實際上,我沒有考慮另一種情況...... ;-) – assylias

相關問題