码迷,mamicode.com
首页 > 其他好文 > 详细

String ,StringBuilder,StringBuffer

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

标签:img   nal   内存地址   重复   存在   bsp   java   技术分享   http   

一.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

标签:img   nal   内存地址   重复   存在   bsp   java   技术分享   http   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!