一尘不染

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

java

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

void main() {
    String zText = "";
    fillString(zText);
    printf(zText);
}

void fillString(String zText) {
    zText += "foo";
}

输出为:

foo

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

这里发生了什么?


阅读 664

收藏
2020-03-23

共1个答案

一尘不染

你有三种选择:

  1. 使用StringBuilder:
StringBuilder zText = new StringBuilder ();
void fillString(StringBuilder zText) { zText.append ("foo"); }
  1. 创建一个容器类,并将容器的实例传递给你的方法:
public class Container { public String data; }
void fillString(Container c) { c.data += "foo"; }
  1. 创建一个数组:
new String[] zText = new String[1];
zText[0] = "";

void fillString(String[] zText) { zText[0] += "foo"; }

从性能的角度来看,StringBuilder通常是最佳选择。

2020-03-23