标签: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
标签:java 来源: https://codeday.me/bug/20190703/1365359.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。