关于String、StringBuilder、StringBuffer的区别从4个方面来理解。
String是不可变的,如果尝试修改String的值,都会产生一个新的字符后对象。
StringBuilder、StringBuffer是可变的,修改不会产生新的对象。
String是线程安全的,因为String是不可变的。
StringBuffer是线程安全的,因为它的每个操作方法都加了synchronized关键字。
StringBuilder是线程不安全的。在单线程下使用StringBuilder效率更高。
String性能最低,其次是StringBuffer,StringBuilder性能最高。
因为String不可变,所以每次做字符串拼接的时候一直创建新的对象和分配内存。
StringBuffer加了同步锁而StringBuilder是无阻塞的。
String—>字符串常量池
StringBuilder、StringBuffer—>堆内存