这是我在这里的第一篇文章,所以请保持友好! :)
假设我有这段代码:
public static void reassign (int[] nums) {
int[] A = {10,11,22};
A = nums;
}
public static void main(String[] args) {
int[] nums = {0,2};
reassign(nums);
System.out.println(nums[1]);
}
为什么我的答案是2而不是11?它与数组的相对大小有关吗?
答案 0 :(得分:1)
当你这样做时,
public static void reassign (int[] nums) {
int[] A = {10,11,22};
A = nums;
}
您将A
作为nums
的引用,而您引用的nums
是来自参数的那个,而不是来自main方法的那个。它的两个不同的变量
您可以这样做:
static int[] nums = {0,2}; //initial value of nums
public static void reassign (int[] arr) {
nums=arr;
}
public static void main(String[] args) {
int[] A = {10,11,22};
System.out.println("before reassign:"+nums[1]);
reassign(A);
System.out.println("after reassign:"+nums[1]);
}
输出:
before reassign:2
after reassign:11
答案 1 :(得分:0)
为什么我的答案是2而不是11?
首先,你想写
public static void reassign (int[] nums) {
int[] A = {10,11,22};
nums = A;
}
但是也不会帮助你:你不能从另一个方法分配给一个方法的局部变量。变量的值(对数组的引用)传递给reassign
,而不是变量本身的地址。
在reassign
中,您只需创建一个新数组,然后将其引用分配给局部变量nums
(在我的更正代码中)。
是否与数组的相对大小有关?
不,它背后的原因是完全通用的,适用于所有Java。