首页 > 其他 > 详细

String ,StringBuilder,StringBuffer

时间:2017-03-06 01:31:05      阅读:250      评论:0      收藏:0      [点我收藏+]

一.String类使用字符数组保存字符串,数组有final修饰,不可变.线程安全

    String a="hello";String b=new String("hello");

    第一种在栈内存定义了一个a对象的引用,指向堆内存的值"hello"的内存地址

    第二种先在栈内存创建一个"hello"对象,new String又产生了另外一个对象.第一个对象无人引用

    

    技术分享

   

   上图的解释:String在Java中使用了共享设计,在Java形成一个对象池,这个对象池可以保存多个对象,如果新实例化的对象已经在对象池中存在,就不在重复定义,直接从    对象池中取出使用。

二.StringBuilder类继承AbstractStringBuilder,底层也是字符数组保存字符串,可变.线程不安全

    //无参构造,默认长度16的字符数组

      public StringBuilder() {
            super(16);
        }

    //带参数的构造函数

     public StringBuilder(String str) {
          super(str.length() + 16);
          append(str);
        }

    //没有实现同步

       public StringBuilder append(String str) {
            super.append(str);
            return this;
        }

三.StringBuffer类继承AbstractStringBuffer,底层也是字符数组保存字符串,可变.线程安全

    //无参构造,默认长度16的字符数组

      public StringBuffer() {
            super(16);
        }

    //带参数的构造函数

     public StringBuffer(String str) {
          super(str.length() + 16);
          append(str);
        }

  

    //和StringBuilder的区别就是同步

        public synchronized StringBuffer append(String str) {
            super.append(str);
            return this;
        }

四.总结:

     1.如果要操作少量的数据用 = String    

              2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder

              3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

 

String ,StringBuilder,StringBuffer

原文:http://www.cnblogs.com/2nao/p/6507571.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!