Java基础回顾:String,StringBuilder,StringBuffer

个人笔记,网上资料以及通过源码总结,侵删

 

 

1. String
  • jdk1.8 使用char[]
  • jdk11 使用byte[]
类图

 

 

特性
String的值是不可变的,每次操作String都会生成新的String对象
类似 str += "WORLD!",会改变str指向堆内存的地址
初始String值为“hello”,然后在这个字符串后面加上新的字符串“world”,这个过程是需要重新在栈堆内存中开辟内存空间的,最终得到了“hello world”字符串也相应的需要开辟内存空间,这样短短的两个字符串,却需要开辟三次内存空间,不得不说这是对内存空间的极大浪费。为了应对经常性的字符串相关的操作,就需要使用Java提供的其他两个操作字符串的类——StringBuffer类和StringBuild类来对此种变化字符串进行处理。
线程安全
 
 
2. StringBuilder

 

 

主要参数
初始化默认16个字符长度,可以自定义,如果初始化有值的话,分配大小为 值长度+16.
 
线程不安全
 
3. StringBuffer

 

 

主要参数
同StringBuilder:初始化默认16个字符长度,可以自定义,如果初始化有值的话,分配大小为 值长度+16.
 
线程安全
通过synchronized关键字实现线程安全
@Override
public synchronized StringBuffer append(Object obj) {
    toStringCache = null;
    super.append(String.valueOf(obj));
    return this;
}
 
 
4. 比较
基本原则:如果要操作少量的数据,用String ;
单线程操作大量数据,用StringBuilder ;
多线程操作大量数据,用StringBuffer。

posted @ 2021-10-13 17:32  fanghuiX  阅读(28)  评论(0编辑  收藏  举报