String、StringBuffer的理解

	public static void main(String[] args){
		String s1="hello";
		String s2="world";

		changeStr(s1,s2);
		System.out.println(s1+"--"+ s2);

		StringBuffer sb1 = new StringBuffer("hello");
		StringBuffer sb2 = new StringBuffer("world");
		
		changeSb(sb1,sb2);
		System.out.println(sb1.toString()+"--"+sb2.toString());
	}

	public static void changeStr(String x,String y){
		x = y;
		y = x+y;
	}
	public static void changeSb(StringBuffer x,StringBuffer y){
		x = y;
		y.append("****add a tail");
	}

对以上两句话的执行结果,第一个是没有问题的,都知道是:hello--world

然而第二句话,以为执行结果是:world--world****add a tail ,但其实结果是:hello--world****add a tail

 

从堆栈的角度来理解

StringBuffer传递到changeSb方法里的是引用,这里特意写了形参为x,y就是为了避免混淆:

 

在changeSb方法里,两个地址的名称是x,y,假如x对应地址0x1111,y对应地址0x2222,当change方法执行到最后,

x中保存的地址是0x2222,y中保存的地址是0x2222,此时

0x1111对应的内容---------"hello"

0x2222对应的内容---------"world****add a tail";

 

而在main方法里,两个地址的名称是sb1,sb2,

sb1中保存的地址是0x1111,sb2中保存的地址是0x2222,

所以打印出的结果应该是  hello--world****add a tail

(参考:https://blog.csdn.net/qq_38225558/article/details/82054486

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值