zoukankan      html  css  js  c++  java
  • String ,StringBuilder,StringBuffer

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

  • 相关阅读:
    [HAOI2010]软件安装
    「HNOI2015」菜肴制作
    [ZJOI2007] 小Q的矩阵游戏 (模板—Dinic)
    「POI2012」约会 Rendezvous
    [APIO2016]划艇
    [CQOI2011]放棋子
    【SDOI2015】bzoj3990 排序
    [bzoj2242] [SDOI2011]计算器
    模板—BSGS
    【BZOJ1227】[SDOI2009]虔诚的墓主人
  • 原文地址:https://www.cnblogs.com/2nao/p/6507571.html
Copyright © 2011-2022 走看看