通过引用传递java中的“hack”不再工作了?

mbjcgjjk  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(344)

这个问题在这里已经有答案了

如何在java中通过引用传递varargs(6个答案)
上个月关门了。
我尝试在java中通过将包含值的大小为1的数组传递给相应的方法来模拟pass-by-ref。
资料来源:

public static void test(String... a) {
    a[0] = new String("bar");
}

public static void main(String[] args) throws Exception {

    String a = "foo";
    test(a);
    System.out.println(a);
}

值仍然是“foo”-为什么?我使用jdk版本15.0.1。

yvfmudvl

yvfmudvl1#

首先是 new String 毫无意义。别那么做。

public static void test(String... a) {
    a[0] = "bar";
}

其次,为了通过引用传递数组,必须传递数组。比如,

public static void main(String[] args) throws Exception {
    String[] a = {"foo"};
    test(a);
    System.out.println(a[0]);
}

输出
酒吧

w8rqjzmb

w8rqjzmb2#

public static void main(String[] args) throws Exception {
    String a = "foo";
    test(a);
    System.out.println(a);
}

实际上与此相同:

public static void main(String[] args) throws Exception {
    String a = "foo";
    String[] temp = { a }; 
    test(temp);
    System.out.println(a);
}

因此“a”不变。

相关问题