String  StringBuffer  StringBuilder的区别

263 阅读2分钟

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都是可变字符串,前者线程不安全,后者线程安全。