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

2022-08-31 06:32:09

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

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

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

输出为:

foo

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

这是怎么回事?


答案 1

您有三种选择:

  1. 使用 StringBuilder:

    StringBuilder zText = new StringBuilder ();
    void fillString(StringBuilder zText) { zText.append ("foo"); }
    
  2. 创建一个容器类并将容器的实例传递给您的方法:

    public class Container { public String data; }
    void fillString(Container c) { c.data += "foo"; }
    
  3. 创建一个数组:

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

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


答案 2

在Java中,没有任何东西是通过引用传递的。一切都是通过价值传递的。对象引用按值传递。此外,字符串是不可变的。因此,当您追加到传递的字符串时,您只会得到一个新的字符串。您可以使用返回值,也可以改为传递 StringBuffer。