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

  • 相关阅读:
    mysql 8 查询报错(sql_mode=only_full_group_by)
    docker安装mysql8版本后 客户端连接出现client does not support authentication...
    docker常用命令
    查看tomcat日志相关Linux命令
    java项目部署到linux服务器涉及的命令
    ehcache与redis对比
    JS中调用BigDecimal处理金额
    thymeleaf模板 th:href 踩坑
    汇总一些绝对有价值的解决方案,边学习边收集
    spring注解总结,spring注解大全
  • 原文地址:https://www.cnblogs.com/2nao/p/6507571.html
Copyright © 2011-2022 走看看