Java提供了String、StringBuffer和StringBuilder类来封装字符串,并提供了一系列操作字符串对象的方法。它们的相同点是都用来封装字符串;都实现了CharSequence接口。它们之间的区别如下:
- String是不可变的,StringBuffer和StringBuilder是可变的字符序列
- String,StringBuffer是线程安全的,StringBuilder是线程不安全的。String线程安全原因是使用final修饰类,成为不可变类,所以线程安全。
StringBuffer是因为所有对外操作方法都被Synchronized修饰,利用锁机制实现线程安全。
- StringBuffer拥有缓冲区,具体在toString()方法中,每次获取 toString 都会直接使用缓存区的 toStringCache 值来构造一个字符串。
StringBuilder 则每次直接复制一次字符数组,再构造一个字符串。
这方面是StringBuilder对StringBuffer的优化。
- 执行效率方面,明显StringBuilder高于StringBuffer,StringBuilder在jdk5提出。
- 只有String 实现了equals()方法和hashCode()方法,
new String("java").equals(new String("java"))的结果为true;