String StringBuffer StringBuilder的区别:
String:
String的值是不可变的,这就造成每次对String的操作都会生成新的String对象,效率低下并且浪费大量内存空间
String特点:
String类被final修饰,不能被继承
String类底层使用数组结构(jdk9之前使用的是char[],jdk9之后使用的是byte[])
String的对象一旦创建就不能修改,底层维护了一个字符串常量池,实现共享
StringBuffer:
StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。
StringBuffer特点:
可变长
线程是安全的
多线程操作
效率低
StringBuilder:
StringBuilder是可变类,和线程不安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuilder对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。
StringBuilder特点:
可变长
线程不安全的
单线程操作
效率高
总结:
如果要操作少量的数据用 String;
多线程操作字符串缓冲区下操作大量数据 StringBuffer
单线程操作字符串缓冲区下操作大量数据 StringBuilder;
StringBuffer和StringBuilder的区别就在于StringBuffer的操
作使用synchronized关键字加了锁,是线程安全的。
StringBuilder和StringBuffer都是可变字符串,前者线程不安全,后者线程安全。