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

  • 相关阅读:
    【洛谷P3992】开车
    Easyui datagrid+ashx 实现动态生成列
    SQL字符串处理函数大全
    在sqlserver中查找某个字段存在于那个表中的语句
    C# 合并图片
    JavaScript 监听屏幕滑动事件的JS
    JavaScript无提示关闭窗口(兼容IE/Firefox/Chrome)
    使用jquery插件实现图片延迟加载技术
    DataTable随机复制一行给新的DataTable
    MySQL恢复数据报错 #1289 The 'InnoDB' feature is disabled; you need MySQL built with 'InnoDB' to hav
  • 原文地址:https://www.cnblogs.com/2nao/p/6507571.html
Copyright © 2011-2022 走看看