3 回答
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也是同样道理。一个地址下,只有一个对象。现在是不是稍稍明白点了!
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。
TA贡献1853条经验 获得超9个赞
第一个,传入的是数值1,所以不会改变原来变量A的值。
第二个,传入的是实例ko的地址,所以在update方法中改变ko.a的值之后
输出ko.a的值,是改变之后的值。
- 3 回答
- 0 关注
- 143 浏览
添加回答
举报