java “值传递和引用传递”个人理解

最近一直在纠结java 中的 值传递和引用传递 经过各种百度了解 触摸到了一点点 希望求证 请大家指正(jdk 1.8下);

在百度上随处可见对于值传递和引用传递 大家一致理解是基础类型和对象的区别:在传递一个基础类型 的时候 会创建一个空间去保存值(生成值副本)但是引用传递保存的却是一个指向堆内存的地址 所以就产生了值传递和引用传递;

但是,在百度中我也发现 其实在创建一个基础类型变量的时候,栈内存中其实保存的也是地址 并没有直接保存值;那内存又是怎么去保存这个值呢?

先了解一下基础类型申请时 内存做了哪些工作:
这里写图片描述
当在 内存中申请了一个基础变量,栈内存中会保存一个指向;然后去查看 栈中有没有这个值如果有这个值,变量内的指向便会指向这个值。没有这个值的话,就会把这个值放到栈内存当中。当给i2 赋其他值时,i2内保存的指向便会改变,

在来看看传递的时候内存其实都做了什么:
值传递:
开启一个方法栈 管理这个方法。方法栈中 开启一个新的空间 去保存传递进来的一个指向栈空间的指向, 然后在方法中去改变这个变量的值,这个变量保存的指向改变了 并且指向了栈中其他值;所以这里变量的值改变了(保存在常量池中的类型和这经历一致)
引用传递:
开启一个方法栈 管理这个方法。方法栈中 开启一个新的空间 去保存传递进来的一个指向堆空间的指向, 然后在方法中
去改变堆空间中的值,注意改变的是堆空间中的值。 并没有改变栈中保存指向堆空间的指向,所以 以致在方法外面发现对象的值改变了;

其实在传递中,两个原始指向都没有改变。只是在方法中 两种类型 操作的对象(把一个快空间当成一个对象)不同 ,值传递 是直接去改变了原始传递进来的对象,而引用传递是去修改了原始传递进来的对象里面的一个值

所以其实java中只存在值传递或者只存在引用传递 并没有“值传递”和引用传递共存;
ps:第一次写。有点方。貌似讲的有点云里雾里,希望看客不要喷,毕竟也是花了时间的。不过有建议,指点的希望大家也不要吝啬

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兔爷不爱我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值