2011-09-12 103 views
-3

多少內存分配給一個String對象在這兩種情況下的String對象的大小知

String s = new String("abc"); 
String s = "abc"; 
+1

什麼語言/框架/環境? –

+1

字符大小或字節大小? –

+0

他們應該是一樣的。兩者在技術上都是相同的東西(AFAIK),除非編譯器可以在Java的.data節中保存abc,而用一些比新的String(「abc」)更小的元數據,但它可能也會做優化。 –

回答

1

有許多s = new String("abc");s2 = new String("abc");等將導致該給定的字符串多分配內存。

使用第二種方法 - String s = "abc";String s2 = "abc"; ...將分配內存只有一次,不管你有多少次與這abc值「新」的字符串。

在兩種方式中,一個對象應該消耗相同的內存大小。

1
String s = new String("abc"); 

用於表示此字符串上述分配的空間取決於平臺。對於32位JVM,該字符串佔用大約10個32位字。但是,如果以這種特殊方式創建字符串,那麼這些單詞中的5個將與原始字符串文字共享......至少在標準的Java 6類庫中。


String s = "abc"; 

這並不是在所有分配的String。相反,它將對現有字符串文字的引用賦予s

+0

情況2是否意味着在某個(其他)時間點發生了分配? – NullUserException

+0

好的。但那個「其他時間」是當類(或其他類)被加載時。它在應用程序執行期間只發生一次。情況1也會發生同樣的情況。 –