如何在Java中通过引用传递varargs

raf*_*ego 0 java variadic-functions

我正在编写一个接收任意数量参数并返回修改的方法.我尝试过使用varargs但是它不起作用,在这里你可以看到代码的简化版本:

public static void main(String[] args) {
   String hello = "hello";
   String world = "world";

   addPrefix(hello, world);

   System.out.println("hello: " + hello + "  world: " + world);
}

public static void addPrefix(String... elements) {
   for (int i = 0; i < elements.length; i++) {
      elements[i] = "prefix_" + elements[i];
   }

   for (int i = 0; i < elements.length; i++) {
      System.out.println(elements[i]);
   }
}
Run Code Online (Sandbox Code Playgroud)

印刷结果:

prefix_hello    
prefix_world    
hello: hello  world: world
Run Code Online (Sandbox Code Playgroud)

如您所见,在方法内部正确修改了值,但原始变量未更改.

我已经查看了很多页面,比如这里这里,但似乎Java将vars的值复制到a Object[],因此引用丢失了.

知道我怎么能这样做?

Ani*_*kur 5

Java是按值传递的.你无法达到你想要的效果.相反,您可以从addPrefix()函数返回修改后的数组.

public static void main(String args[]) {

    String hello = "hello";
    String world = "world";

    String[] elements = addPrefix(hello, world);

    for (int i = 0; i < elements.length; i++) {
        System.out.println(elements[i]);
    }




}

public static String[] addPrefix(String... elements) {
    for (int i = 0; i < elements.length; i++) {
        elements[i] = "prefix_" + elements[i];
    }

    for (int i = 0; i < elements.length; i++) {
        System.out.println(elements[i]);
    }

    return elements;
}
Run Code Online (Sandbox Code Playgroud)

和输出

prefix_hello
prefix_world
prefix_hello
prefix_world
Run Code Online (Sandbox Code Playgroud)