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

her*_*ian 0 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Pra*_*kar 7

数组是a 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;
  }
}
Run Code Online (Sandbox Code Playgroud)

这是怎么回事

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

要正确理解这一点,您可以阅读有关原语和引用变量的java中的值传递.参考变量部分对您有用.

  • @ user1702529:参数确实是按值传递的.但传递的不是对象或数组,而是对对象*的引用*或对数组*的引用.如果将另一个数组分配给list参数,则main方法中的变量不会受到影响. (3认同)