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[],因此引用丢失了.
知道我怎么能这样做?
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)
| 归档时间: |
|
| 查看次数: |
846 次 |
| 最近记录: |