我习惯在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通常是最佳选择。

    09-28 05:32