在Java中通过引用传递字符串?

我习惯在中执行以下操作C:


void main() {

    String zText = "";

    fillString(zText);

    printf(zText);

}


void fillString(String zText) {

    zText += "foo";

}

输出为:


foo

但是,在Java中,这似乎不起作用。我认为是因为该String对象是复制的,而不是通过referenced传递的。我以为字符串是对象,总是通过引用传递。


这里发生了什么?


梵蒂冈之花
浏览 485回答 3
3回答

人到中年有点甜

您有三种选择:使用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中,没有任何东西通过引用传递。一切都是通过价值传递的。对象引用按值传递。另外,字符串是不可变的。因此,当您将附加到传递的字符串后,便会得到一个新的字符串。您可以使用返回值,也可以传递StringBuffer。

有只小跳蛙

发生的事情是按值传递了引用,即,传递了引用的副本。java中的任何内容都不会通过引用传递,并且由于字符串是不可变的,因此该分配创建了一个新的字符串对象,引用的副本现在指向该对象。原始引用仍指向空字符串。对于任何对象,这都是相同的,即在方法中将其设置为新值。下面的示例使事情变得更加显而易见,但是连接字符串实际上是同一回事。void foo( object o ){    o = new Object( );  // original reference still points to old value on the heap}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java