ref 修饰值类型和修饰引用类型

ref 关键字传递栈地址

引用类型传递的堆的地址

引用类型的对象或实例存储在堆上,而栈上存储的是指向放对象的堆的地址(栈上放了个地址,这个地址是对象在堆上的存放位置)


不加ref关键字时,我们传递的引用类型,其实是一个指向堆的地址,method(A a);(即 栈里面存的那个地址)

当我们在方法里面进行操作时,比如 A b = a;其实是将a的地址放到了一个新的栈的位置上,此时,栈上有两个位置都放着a的地址,当我们传递b时,同样的是传递了指向堆的那个地址。我们对堆里面的对象进行修改,所有存放堆这块地址的引用的对象都会发生改变。


加上ref 就不会重新分配栈的地址。

method(ref a); 此时,如果将a指向两一个对象,即a的地址成为另一个对象在堆中的地址,那么,栈中存放的地址也就变了。

而不加ref,修改b 指向的对象,只是修改了复制出来的栈里面存放的地址。而原来的不变

比如:

将一个数组引用传入一个方法,我们是不能修改传入的引用的地址的,因为,只是传入了一个拷贝,在外面打印地址,会返现没有变化

而,当我们添加ref后,再进行 a = newAddr时,原来的对象就已经变了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值