java – 为什么数组中的元素可以改变值,但是原始类型的值不能改变?(无法弄清楚一个好的标题,对不起)

请参阅代码(
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
点赞