在Java中通过引用传递字符串?
我习惯在C
执行以下操作:
void main() {
String zText = "";
fillString(zText);
printf(zText);
}
void fillString(String zText) {
zText += "foo";
}
输出是:
foo
但是,在Java中,这似乎不起作用。 我假设因为String
对象被复制而不是被引用传递。 我认为字符串是对象,它总是通过引用传递。
这里发生了什么?
你有三个选择:
使用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通常是最好的选择。
在Java中,没有任何东西通过引用传递。 一切都通过价值传递 。 对象引用是按值传递的。 此外,字符串是不可变的 。 所以当你附加到传递的String时,你只需要一个新的String。 你可以使用返回值,或者传递一个StringBuffer。
发生的事情是引用是通过值传递的,即传递引用的副本。 java中没有任何内容是通过引用传递的,并且由于字符串是不可变的,因此该分配会创建一个新的字符串对象,该对象现在指向该引用的副本。 原始引用仍然指向空字符串。
这对于任何对象都是一样的,即将其设置为方法中的新值。 下面的例子只是让更明显的事情发生,但是连接一个字符串实际上是一回事。
void foo( object o )
{
o = new Object( ); // original reference still points to old value on the heap
}
链接地址: http://www.djcxy.com/p/465.html