在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/15209.html

    上一篇: Passing a String by Reference in Java?

    下一篇: Return boolean from method that calls an Int