参数传递分两种,按值传递和按址传递,为啥会出现两种不同的参数传递?其中其中参数怎么变化的?
3条回答 默认 最新
- charm_of_code 2017-03-12 02:33关注
java中的确都是按值传递,可以通过下面的图理解,A是实参,B是函数参数,
当参数类型是int这样的基本数据类型的时候,比如实参是int A=1,那么函数参数B的值也是1,但是他们在栈里边的地址是不一样的,这也就是
为什么在函数体内对B进行一系列操作,对A的值没有影响的原因。当实参是引用的时候,同样也是传值,传的是引用值。也就是说A的值指向对象(这里说指向不是很合适,毕竟不是指针),
那么B的值是等于A的引用值,同样B指向了与A指向的同一个对象,同理A与B在栈中的地址是不一样的,但是他们的值是相同的,当B对堆中的对象
进行操作后,堆对象的属性就会改变,当A读取堆对象的时候,自然发现属性已经改变了。其实要注意的一点就是,对基本数据类型的操作是在栈内的,而对于对象是在堆内操作。(图画得不是很好,还请见谅)
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码
- ¥15 ubuntu子系统密码忘记
- ¥15 保护模式-系统加载-段寄存器