为什么我不能通过用不同大小的数组替换变量来重新分配数组的大小?

时间:2014-03-04 08:40:12

标签: java arrays size

这是我在这里的第一篇文章,所以请保持友好! :)

假设我有这段代码:

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?它与数组的相对大小有关吗?

2 个答案:

答案 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。