我得到了这两种方法,当我运行问题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;
}
}
答案 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。参考变量部分对您有用。