1.可变与不可变
- String是不可变的
String由final修饰,底层是字符数组保存字符串 - StringBuffer和StringBuilder是可变的
StringBuffer和StringBuilder都有一个相同的父类—AbstractStringBuilder,底层同样是字符数组保存字符串,但是没有final修饰,所以是可变的
2.JDK版本号
- String从JDK1.0版本就有了
- StringBuffer出道也较早,也是从JDK1.0就有了
- StringBuilder从JDK1.5才有的
String
StringBuffer
StringBuilder
3.线程安全问题
-
String中的对象是不可变的,也就可以理解为常量,所以是线程安全的
-
StringBuffer是线程安全的类,方法中都会有同步关键字synchronized
-
StringBuilder非线程安全,方法中没有同步关键字