我正在编写一个方法,该方法可以接收任意数量的参数并返回修改后的参数。我已经尝试使用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
如您所见,这些值在方法内部已正确修改,但是原始变量未更改。
我看过许多页面,例如here和here,但是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/