新手问题。试图了解Java中的引用与值参数,请考虑以下内容:
//Helper function int[] to csv
public static String csv(int[] values){
String ret = "";
for(int i = 0; i < values.length; i++)
ret = String.format("%s%s%s",ret,i == 0 ? "" : ", ",values[i]);
return ret;
}
//Helper function, print to console
public static void print(int[] v){
System.out.println(csv(v));
}
public static void method1(int[] input){
input[0] = 3; input[1] = 4; input[2] = 5;
}
public static void method2(int[] input){
input = new int[]{6,7,8};
}
public static void main(String[] args) throws Exception {
int[] original = {0,1,2};
print(original);
method1(original);
print(original); //As expected
method2(original);
print(original); //Modification ignored
}
在上面,存储了对方法1中数组的更改,但在方法2中,函数内部的新赋值不会影响原始数组,因此具有局部范围。
那么如果我需要对通过引用传递的数组执行数组调整大小操作呢?这在java中是不可能的吗?
答案 0 :(得分:2)
Java中的所有参数都是通过副本传递的。问题是,副本是什么?对于包括数组的对象,将复制对象引用。您现在有两个对同一对象的引用,因此可以修改该对象。
在method2中,参数&#34;输入&#34;最初设置为对数组的对象引用。然后你修改&#34;输入&#34;指向另一个数组。这对呼叫者没有影响。如果您已离开&#34;输入&#34;单独使用它来改变元素,然后你会看到调用者的变化。