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

  • 相关阅读:
    eclipse
    Java SE Runtime Environment
    开源免费的LittleV GUI
    【转】 ARM Cortex-M 系列 MCU 错误追踪库 CmBacktrace
    【转】博客美化(7)推荐几个优秀的自定义博客
    【转】博客美化(6)为你的博文自动添加目录
    【转】博客美化(5)为博客或系统添加一个强大的评论系统
    【转】博客美化(4)为博客添加一个智能的文章推荐插件
    linux管理进程的链表
    连连看游戏(dfs)【华为上机题目】
  • 原文地址:https://www.cnblogs.com/2nao/p/6507571.html
Copyright © 2011-2022 走看看