为什么原始数组是从另一种方法修改的?

时间:2014-01-13 08:26:26

标签: java arrays methods

我得到了这两种方法,当我运行问题8时,它打印出“1 3”,但我不明白为什么。 doSomething方法不应该影响question8方法中的“arr”数组,因此打印出“2 4”

private static void question8() {
    int[] arr = {1,2,3,4};
    doSomething(arr);
    System.out.print(arr[1] + " ");
    System.out.print(arr[3]);
}
private static void doSomething(int[] list) {
    int[] b = list;
    for (int i = 0; i < b.length; i++) {
        b[i] = i;
    }
}

1 个答案:

答案 0 :(得分:7)

数组是Object,引用变量按值传递。访问相同的对象。在您的代码中,

private static void doSomething(int[] list) {
int[] b = list; // this means list and b are referring to the same array that was being referenced by list reference variable
for (int i = 0; i < b.length; i++) {
    b[i] = i;
  }
}

这是怎么回事

  • 您可以使用question8()方法创建数组。
  • 您将其从doSomething()
  • 传递给question8()方法
  • 将相同的数组对象传递给doSomething()方法,arr方法中的question8()变量引用该方法。
  • 现在再次,你正在做int[] b = list,这意味着变量b指的是由变量list引用的数组对象。数组对象也是一样的。

要正确理解这一点,您可以阅读pass by value in java with primitives and reference variables。参考变量部分对您有用。