一、String(不可变类)
String类是不可变类,一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。
每次创建一个String类都会生成一个新的对象,这样极大的浪费了内存空间并且效率低下。
二、StringBuffer & StringBuilder(可变类)
StringBuffer和StringBuilder对象则代表一个字符序列可变的字符串,所以和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。这是StringBuffer和StringBuilder对象的共同点。
但是StringBuffer 和 StringBuilder也有一些区别。
StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能,所以StringBuilder性能略高于StringBuffer。
StringBuffer是如何实现线程安全的?
查看源码可知是SringBuffer类中的方法都添加了synchronized关键字,也就添加了一个锁机制,用来保证线程安全。
而StringBuilder并没有使用加锁机制所以不是线程安全的。
所以在多线程情况下因为要考虑线程安全所以一般使用StringBuffer,在单线程因为不考虑线程安全的情况所以就用StringBuilder,因为StringBuilder的性能略高于StringBuffer。