一个关于StringBuffer的java题目

有这么一个程序片段
public class Test{
          public static void main(String[] args){
            StringBuffer a = new StringBuffer("A");
            StringBuffer b = new StringBuffer("B");
            operate(a,b);
            System.out.println(a+","+b);

   }
          public static void operate(StringBuffer x,StringBuffer y){
            x.append(y);
            y=x;
   }
}

问执行结果。


初看此题目时,是这么想的,operate函数中将x,append了y则x应该为AB,x所指向的对象和a指向的对象是一个所以a也为AB,然后又看到y=x,认为将y指向了x,则y也为AB,就主观的认为了b也为AB。一看答案发现y为B,遂想了一下,发现地确实我弄错了。

operate函数中y=x,这里的y和x都是在形参表中定义的,是一个新对象,众所周知java对象所有的函数传递都是值传递,所以这里的x,y并不是main函数中的a,b对象,而是两个新对象,但是他们都指向的是相同的堆内存中的对象,所以operate中的第一句x.append(y),也影响到了a的值,而y=x,则只改变了operate函数中的值,所以b对象还是B。

粗略的内存指向如图所示:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值