一道面试题:StringBuffer a=new StringBuffer ("A"); StringBuffer b=new StringBuffer

前几天又看到这个面试题,再次看看

public  class  Jtest{
       public  static  void  main(String[] args) {
             StringBuffer a= new  StringBuffer ( "A" ); 
             StringBuffer b= new  StringBuffer ( "B" );
             oper(a,b);
             System.out.print(a+ "," +b);
         }
       static  void  oper(StringBuffer c,StringBuffer d){
           c.append( "B" );   
           d=c;
       }
}

------输出结果是什么?

此题关键就在于 oper(c,d) 方法,这个方法到底做了什么,怎么结果就和想的不一样呢?
那么,就来看一下这个方法做了什么。

上代码:

package test;
public class Jtest{
      public static void main(String[] args) {
           StringBuffer a=new StringBuffer ("A"); 
           StringBuffer b=new StringBuffer ("B");
           //取代 oper(a,b) start;
              StringBuffer c;
              StringBuffer d;
              c = a; //c的地址指向了a,此时 c 的值为"A";
              d = b; //d的地址指向了b,此时 d 的值为"A";
              c.append("B"); //在c(a)的地址值变为 “AB”
            d=c; // d的地址指向了c,也就是指向了a,**关键就在这里了**,那么可以看到,这个过程中根本就没对b做任何操作,
            //就好像gg(d)路过一mm(b),说:这mm(b)不错,然后发现前面有个更有吸引力的mm(c)然后就见异思迁了,然后拿了一朵花("B")给mm(c(a))了,,所以mm(b)压根就不知道什么情况,没参与
           // so, b 还是b("B") , a已不是a("A"),二是a("AB")
            //取代 oper(a,b) end; 
            System.out.print(a+","+b);
      }
      static void oper(StringBuffer c,StringBuffer d){
          c.append("B");   
          d=c;
          //一开始的想法是这样的,c = a; d= b; 那么 c.append("B");后 c=“AB”,d=c = "AB",实际上并不是数学中的简单等价传递
      }
}


转载于:https://my.oschina.net/u/1987615/blog/718676

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值