zoukankan      html  css  js  c++  java
  • Java 中 String、StringBuffer、StringBuilder 三者之间的区别

    String, StringBuffer, StringBuilder 区别
    • 可变性
      • String
        • String在类中使用final关键字修饰字符数组来保存字符串
        • 使得String是不可变的
          • private final char value[]
        • 在Java9中String改用为byte数组来保存字符串
          • private final byte[] value
        • 小发现
          • Java的数组定义支持两种格式
            • int[] a Java推荐的格式
            • int a[] 迎合C语言入门习惯
      • StringBuffer
      • StringBuilder
        • StringBuffer 和StringBuilder 继承AbstractStringBuilder
        • AbstractStringBuilder 类中没有使用final关键字修饰字符数组来保存字符串
        • 使得这两个子类是可变的
          • private char value[]
    • 线程安全性
      • 等级
        • 不可变
          • 在java中Immutable(不可变)对象一定是线程安全的,
          • 因为线程的调度和交替执行不会对对象造成任何改变
        • 绝对线程安全
        • 相对线程安全
        • 线程兼容
        • 线程对立
      • String
        • 由于String是不可变的,可以理解为常量,所以线程安全
      • StringBuffer
        • StringBuffer对方法加了同步锁【Synchronized】或者对调用的方法加了同步锁,所以是线程安全
      • StringBuilder
        • StringBuilder没有对方法加同步锁,所以是非线程安全
    • 性能
      • String
        • 每次对String类型进行改变时,都会生成一个新的String对象
        • 并将指针指向新的对象
      • StringBuffer
        • StringBuffer每次改变都是对自身进行操作
        • 不会生成新的对象并改变对象引用
      • StringBuilder
        • 与StringBuffer对比,性能提升10%~15%,但多线程不安全
    • 使用总结
      • String
        • 适合操作少量的数据的情况
      • StringBuffer
        • 多线程操作字符串缓冲区下操作大量数据
      • StringBuilder
        • 单线程操作字符串缓冲区下操作大量数据
     
  • 相关阅读:
    Python 中的map函数,filter函数,reduce函数
    编程中,static的用法详解
    C++ list容器系列功能函数详解
    python中的configparser类
    310实验室OTL问题----将写好的C++文件转换成Python文件,并将数据可视化
    310实验室OTL问题
    常量指针、指针常量、指向常量的指针常量
    Iterator迭代器的相关问题
    struts2中action中的通配符
    struts2访问servlet API
  • 原文地址:https://www.cnblogs.com/littlebob/p/12765376.html
Copyright © 2011-2022 走看看