2010-07-29 120 views
0

可能重複:
string memory allocation字符串內存分配

是什麼

System.out.println("hello world"); 
System.out.println("hello world"); 

String s="hello world"; 
System.out.println(s); 
System.out.println(s); 
之間的區別

哪個更好?

+2

已標記爲可能引起注意的模特襪子傀儡 – 2010-07-29 10:12:40

回答

1

代碼質量明智的最好定義重複串常量:

public static final String HELLO_WORLD = "hello world"; 

至於內存 - 沒有區別。

2

無,它們編譯成幾乎相同的字節碼(唯一的區別是可變參考)。沒有內存差異(變量引用除外)。

0

在此特定情況下,它們都是相同的。常量字符串是由VM編輯的intern,以便它們都指向相同的String對象。

一般而言,一旦串計算,最好將其分配給一個字段/變量和重用。 (我想這一般適用於 - 重用計算結果時沒有變化,而不是重複計算。)

對於字符串常量,我通常將它們移動到靜態常量領域。沒有性能增益,但它避免了在代碼中具有「魔法值」。同樣,理想情況下,UI消息應移出代碼並放入properties bundles

0

在我的腦海裏,Java編譯器將優化的代碼,不會有兩個解決方案之間的任何差別。

中的javac的代碼優化做的gcc不值得的優化,但它應該是足夠高效地爲這樣的事情。 您可能會考慮Java中的「不斷摺疊」優化(但我不確定)。 你也可以看看this article