为了账号安全,请及时绑定邮箱和手机立即绑定

输出结果为1,2.为什么啊?

输出结果为1,2.为什么啊?

C
慕仙森 2022-08-03 11:03:23
public class ParamaterDemo {public static void main(String[] args) {int a = 1;update(a);System.out.println(a);Koo ko = new Koo();update(ko);System.out.println(ko.a);}static void update(int a) {a++;}static void update(Koo ko){ko.a++;}}class Koo{int a = 1;}
查看完整描述

3 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

用通俗易懂的方式给你解释解释!
参数传递有两种方式:
1、传值
2、传地址
java中,对于简单类型(不是对象类型)是传值;而对于对象类型则是传地址。
对于传值操作,例如int a = 1; java会自动复制一个备份变量,他的值与a的值是完全相同的。 update(a);方法之后,其实这个方法中操作的是哪个备份的变量里面的值,而不是a中的值,所以当你在打印的时候,a的值还是原来的那个值。
对于参数是对象类型的情况,Koo ko = new Koo();当我们new一个对象的时候,java其实是在内存的堆中开辟了一个小空间,把这个对象放到其中,为了以后我们能访问到这个对象,jvm会把这个对象在内存中的地址返回给我们,不信你就打印一下 ko 这个对象,看看! 你看到的就是这个对象在内存中的地址信息。所以当你把对象作为参数的时候,jvm就会把该对象的地址交给update(ko)方法,所以当你更改该对象下的属性值的时候,其实更改的就是原来那个对象的值。所谓跑的了和尚跑不了庙,其实就是这个道理。 可想:如果你的一位朋友想到你家拜访,你肯定会告诉他,你家是什么什么路、什么什么小区、哪号楼、那单元诸如此类的信息,而这个信息对你是唯一的,这个地址下,就住着你一家人,jvm也是同样道理。一个地址下,只有一个对象。现在是不是稍稍明白点了!


查看完整回答
反对 回复 2022-08-08
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

第一次调用updata()函数时你传递的参数a就相当于1,a的值并没有变,在这时函数static void update(int a) {
a++;
}
就相当于static void update(int b) {
b++;
}
所以你显示的是1。
当你用对象作为参数ko时,语句“ko.a”实际上引用的是a的地址,它就好像是一个实实在在的a。所以当ko.a++时,它的值会改变,这时是2。


查看完整回答
反对 回复 2022-08-08
?
暮色呼如

TA贡献1853条经验 获得超9个赞

第一个,传入的是数值1,所以不会改变原来变量A的值。
第二个,传入的是实例ko的地址,所以在update方法中改变ko.a的值之后
输出ko.a的值,是改变之后的值。

查看完整回答
反对 回复 2022-08-08
  • 3 回答
  • 0 关注
  • 143 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信