首先,我知道java中的字符串是不可變的。關於Java中的字符串不變性
我有一個關於字符串不變性問題:
public static void stringReplace (String text)
{
text = text.replace ('j' , 'c'); /* Line 5 */
}
public static void bufferReplace (StringBuffer text)
{
text = text.append ("c"); /* Line 9 */
}
public static void main (String args[])
{
String textString = new String ("java");
StringBuffer textBuffer = new StringBuffer ("java"); /* Line 14 */
stringReplace(textString);
bufferReplace(textBuffer);
System.out.println (textString + textBuffer); //Prints javajavac
}
但是,如果我們寫:
public static void bufferReplace (StringBuffer text)
{
text = text.append ("c"); /* Line 9 */
}
public static void main (String args[])
{
String textString = new String ("java");
StringBuffer textBuffer = new StringBuffer ("java"); /* Line 14 */
textString = textString.replace ('j' , 'c');
bufferReplace(textBuffer);
System.out.println (textString + textBuffer); //Prints cavajavac
}
的事情是我所期望的第一個例子將打印一樣的第二印刷。原因是當我們將textString
傳遞給我們實際傳遞給textString
的函數時。現在在函數體另一個字符串被text.replace ('j' , 'c')
生產,我們分配給該字符串,我們在傳遞的字符串的引用。 在第二個例子中,我只分配給由textString.replace ('j' , 'c');
產生的testString
這個字符串的引用。爲什麼有這麼差異?
遵循這個原因,其結果必須是相同的。怎麼了?
Btw。如果您不需要同步,請使用StringBuilder而不是StringBuffer。 – 2014-10-19 10:53:49
@ jakub.petr爲什麼這麼重要? – 2014-10-19 10:54:29
@ St.Antario因爲'StringBuffer'比'StringBuilder'慢得多 – msrd0 2014-10-19 10:55:36