gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:28:04 26 4
gpt4 key购买 nike

我得到了这两种方法,当我运行 Question8 时,它打印出“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;
}
}

最佳答案

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

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() 方法中创建数组。
  • 您正在将其传递给 question8() 中的 doSomething() 方法
  • 相同的数组对象被传递给 doSomething() 方法,该方法由 question8() 方法中的 arr 变量引用。<
  • 现在,您正在执行 int[] b = list 这意味着变量 b 引用了变量 list< 引用的数组对象。同样,数组对象是相同的。

要正确理解这件事,您可以阅读 pass by value in java with primitives and reference variables 。引用变量部分对您很有用。

关于java - 为什么原始数组是用另一种方法修改的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21086715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com