我正在编写一个方法,该方法可以接收任意数量的参数并返回修改后的参数。我已经尝试使用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]);
   }
}


打印结果:

prefix_hello
prefix_world
hello: hello  world: world


如您所见,这些值在方法内部已正确修改,但是原始变量未更改。

我看过许多页面,例如herehere,但是Java似乎将vars的值复制到了Object[],因此引用丢失了。

我该怎么办?

最佳答案

Java是pass by value。您无法实现自己想要的。相反,您可以从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;
}


和输出

prefix_hello
prefix_world
prefix_hello
prefix_world

关于java - 如何通过Java中的引用传递varargs,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21476263/

10-11 22:32
查看更多