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

这篇博客探讨了Java中参数传递的机制,特别是针对基本类型和数组的区别。文章指出,Java按值传递参数,这意味着方法接收的是变量的副本。对于数组,传递的是引用副本,因此可以改变数组元素的值。而对于基本类型,传递的是数值副本,方法内部的修改不会影响原始变量的值。这解释了为何`changeArr()`方法能改变数组元素,而`changeM()`方法不能改变原始`m`的值。
摘要由CSDN通过智能技术生成

请参阅代码(

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值