29. String, StringBuffer,StringBuilder 的区别是什么
29. String, StringBuffer,StringBuilder 的区别是什么
可变与不可变
-
String 是不可变的。 在底层下,是用final修饰的,是用字符串数组存储的。任何的修改都是会重新创建一个新的对象,而不会在原来的对象修改
private final char value[];
-
StringBuffer 和 StringBuilder 是可变的。他们都是继承自AbstractStringBuilder。AbstractStringBuilder也是用字符数组存储的,但没有final修饰符修饰。所以是可变的
char[] value;
线程安全性
- String Builder 是不安全的。
- StringBuffer 是线程安全的。加了一个同步锁来修饰它。
- String 是用 final 来修饰的,所以是安全的