另一個question回答了我如何在編譯時計算字符串文字的連接。在我正在開發的一個項目中,我們使用StringBuffer
來處理大型查詢的多行字符串。它只是附加文字,所以它讓我想到是否會發生類似的事情。文字的字符串分配
在下面的代碼中,緩衝區會在編譯時追加它的內容嗎?當多線程嘗試執行此功能時,這將如何表現?
public static String querySomething(int arg){
StringBuffer buffer = new StringBuffer();
buffer.append("A quite long query");
buffer.append("that doesn't fit in one line");
buffer.append("...");
}
那豈不是更好地定義String
爲常數,因爲這將是線程安全的,我們知道它可以在編譯時與加運算得到串聯。喜歡的東西:
private final static REALLY_LONG_QUERY1 = "A quite long query that"
+"doesn't fit in one line"
+"...";
由於'StringBuffer'在方法**中被聲明爲**,所以如果此方法被多個線程同時調用,它將不會被考慮在內。你甚至可以用'StringBuilder'替換它,並且具有相同的行爲(開銷較小)。 – 2013-04-04 13:47:14