• 一道面试题:StringBuffer a=new StringBuffer ("A"); StringBuffer b=new StringBuffer (StringBuffer线程安全 StringBuilder线程不安全)


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

    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",实际上并不是数学中的简单等价传递  
          }  
    }  
    

      

  • 相关阅读:
    电子设计技术支持网站
    用nero刻录系统碟,数据碟
    winsock编程学习1
    java学习开发环境的构建
    第五次作业 计科
    第四次作业 计科
    第三次作业 计科
    第一次作业 计科
    第二次作业 计科
    maven中的三种工程,以及在idea中构建父子工程。
  • 原文地址:https://www.cnblogs.com/aspirant/p/6788998.html
Copyright © 2020-2023  润新知