java 引用

public static void main(String[] args) {
  StringBuffer a = new StringBuffer("A");
  StringBuffer b = new StringBuffer("B");
  Operator(a,b);
  System.out.println(a+" "+b);
 } 
 public static void Operator(StringBuffer x,StringBuffer y){
  x.append(y);
  y=x;
 }
 
输出AB  B
 
原因:(建议自己动手画图有利于理解)
1》StringBuffer a = new StringBuffer("A");StringBuffer b = new StringBuffer("B");执行到这两句,jvm在栈里面分配了两块内存给引用a,b.在堆里面分配了两块内存给A,B,这里假设AB在堆里面的地址分别是#1,#2,,显然栈里面分配的两块内存里面存放的就是地址#1,#2
2》  Operator(a,b);执行到这儿,转到 public static void Operator(StringBuffer x,StringBuffer y){
  x.append(y);
  y=x;
 }
此时jvm会在栈里面再分配两块内存给引用形参x,y.假设存放的分别是地址#3,#4,接下来进行引用传递,将a,b传递给x,y。此时xy里面存放的分别是a,b存放的地址#1,#2, 执行到x.append(y);时,#1地址中原本的A变为了AB,执行到  y=x时,y中存放的地址变为了x中存放的地址#1,
此时,调用函数代码执行完毕,局部变量空间释放,也是释放xy
这个时候,ab中存放的地址还是#1,#2,只是地址#1中存放不再是A,而是AB.#2中存放的依然是B
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值