请参阅代码(
Java):
public static int[] array(){
int[]arr={0,1};
changeArr(arr);
return arr;
}
public static void changeArr(int[]arr){
arr[0]=100;
arr[1]=101;
}
然后我在arr []中打印元素,我发现arr [0]变为100,并且arr [1]变为101,我知道这是正确的,因为方法changeArr()会更改值.
然而,
public static int m(){
int m=0;
changeM(m);
return m;
}
public static void changeM(int m){
m=100;
}
为什么m的值不变?如果我打印m,m仍然是0,它不会改为100,为什么?
为什么数组中的元素可以改变,但原始类型m不会改变?
最佳答案 Java按值传递参数.这意味着创建了参数的副本,并将此副本传递给该方法.对于数组,复制的是数组的引用(或指针,如果您愿意).所以你得到以下内容:
在方法调用之前:
arr --------> [1, 2]
在方法调用期间,在分配之前:
arr --------> [1, 2]
^
|
arr-copy -------
在方法调用期间,在分配之后:
arr --------> [100, 101]
^
|
arr-copy -------
方法调用后:
arr --------> [100, 101]
传递基元时,将复制基元值本身.
在方法调用之前:
m ======== 0
在方法调用期间,在赋值之前:
m ========= 0
m-copy ==== 0
在方法调用期间,在赋值后:
m ========= 0
m-copy ==== 100
方法调用后:
m ========= 0