3 回答

TA貢獻1895條經(jīng)驗 獲得超7個贊
您有三種選擇:
使用StringBuilder:
StringBuilder zText = new StringBuilder ();
void fillString(StringBuilder zText) { zText.append ("foo"); }
創(chuàng)建一個容器類,并將容器的實例傳遞給您的方法:
public class Container { public String data; }
void fillString(Container c) { c.data += "foo"; }
創(chuàng)建一個數(shù)組:
new String[] zText = new String[1];
zText[0] = "";
void fillString(String[] zText) { zText[0] += "foo"; }
從性能的角度來看,StringBuilder通常是最佳選擇。

TA貢獻1712條經(jīng)驗 獲得超3個贊
在Java中,沒有任何東西通過引用傳遞。一切都是通過價值傳遞的。對象引用按值傳遞。另外,字符串是不可變的。因此,當您將附加到傳遞的字符串后,便會得到一個新的字符串。您可以使用返回值,也可以傳遞StringBuffer。

TA貢獻1824條經(jīng)驗 獲得超8個贊
發(fā)生的事情是按值傳遞了引用,即,傳遞了引用的副本。java中的任何內(nèi)容都不會通過引用傳遞,并且由于字符串是不可變的,因此該分配創(chuàng)建了一個新的字符串對象,引用的副本現(xiàn)在指向該對象。原始引用仍指向空字符串。
對于任何對象,這都是相同的,即在方法中將其設(shè)置為新值。下面的示例使事情變得更加顯而易見,但是連接字符串實際上是同一回事。
void foo( object o )
{
o = new Object( ); // original reference still points to old value on the heap
}
添加回答
舉報