String StringBuilder StringBuffer的区别
目录
-
继承图
-
String
- 是一个不可变的字符串, 一旦创建就不能再修改了
- 创建新的字符串时会先去字符串常量池中查找, 如果存在就不会再次创建了
- 不可变的原因
- String是一个final类, 里面的许多变量 方法也被final修饰了
- 底层使用的是一个char数组, 这个char数组也被final修饰了
-
StringBuilder和StringBuffer
- 是一个可以修改的字符串
- 修改字符串时不会产生新的字符串
- 修改仅仅是对对象内部的char数组进行修改, 不会产生新的对象
- 都是都是继承自AbstractStringBuilder
- 底层是基于可修改的char数组, 没有被final修饰, 数组大小默认是16
- StringBuilder线程不安全, StringBuffer线程安全
- StringBuffer里面许多方法都加了synchronized锁
- 通过append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。一旦生成了最终想要的字符串,就可以调用它的toString()方法将其转换为一个String对象
- 是一个可以修改的字符串