3 回答

TA贡献1895条经验 获得超7个赞
您有三种选择:
使用StringBuilder:
StringBuilder zText = new StringBuilder ();
void fillString(StringBuilder zText) { zText.append ("foo"); }
创建一个容器类,并将容器的实例传递给您的方法:
public class Container { public String data; }
void fillString(Container c) { c.data += "foo"; }
创建一个数组:
new String[] zText = new String[1];
zText[0] = "";
void fillString(String[] zText) { zText[0] += "foo"; }
从性能的角度来看,StringBuilder通常是最佳选择。

TA贡献1712条经验 获得超3个赞
在Java中,没有任何东西通过引用传递。一切都是通过价值传递的。对象引用按值传递。另外,字符串是不可变的。因此,当您将附加到传递的字符串后,便会得到一个新的字符串。您可以使用返回值,也可以传递StringBuffer。

TA贡献1824条经验 获得超8个赞
发生的事情是按值传递了引用,即,传递了引用的副本。java中的任何内容都不会通过引用传递,并且由于字符串是不可变的,因此该分配创建了一个新的字符串对象,引用的副本现在指向该对象。原始引用仍指向空字符串。
对于任何对象,这都是相同的,即在方法中将其设置为新值。下面的示例使事情变得更加显而易见,但是连接字符串实际上是同一回事。
void foo( object o )
{
o = new Object( ); // original reference still points to old value on the heap
}
添加回答
举报