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
        • 单线程操作字符串缓冲区下操作大量数据
     
  • 相关阅读:
    线程池ThreadPoolExecutor
    常用引擎+存储过程
    在浏览器中输入www.baidu.com后执行的全过程
    win端git连接私服仓库+上传本地项目+从服务器下载文件到win
    TCP的三次握手和四次挥手+TCP和UDP的区别
    2017网易---计算糖果
    ubuntu下wireshark+scapy+tcpreply
    网易2017---数列还原
    2017网易---藏宝图
    2017网易---不要二
  • 原文地址:https://www.cnblogs.com/littlebob/p/12765376.html
Copyright © 2011-2022 走看看