定义
- String------字符串类,由多个字符组成得一串数据(字符序列),字符串是是常量
- StringBuffer------可变的字符序列,线程安全。
- StringBuilder(jdk1.5)------可变的字符序列,线程不安全的。
String类和StringBuffer类的区别?
1.String长度不可变,一旦赋值,就不能改变,每次都要创建新的空间。
2.StringBuffer内容长度可变,不会浪费太多资源。
StringBuilder类和StringBuffer类的区别?
最主要的区别是两者的线程安全效率的高低,StringBuffer是效率低,但是线程安全,线程安全的可以被多个线程安全使用,其方法大都采用了 synchronized 关键字进行修饰。而StringBuilder没有这个修饰,效率高,可以被认为是线程不安全的。
注意
1.String,StringBuffer和StringBuilder都是被final修饰的,都不可以被继承改写的。
2.StringBuffer和StringBuilder都继承自抽象类AbstractStringBuilder。
3.三者的执行速度:StringBuilder > StringBuffer > String
总结
String:final修饰,不存在扩容。字符串拼接,截取,都会生成一个新的对象。频繁操作字符串效率低下,因为每次都会生成新的对象。
StringBuilder: 类内部维护可变长度char[] , 初始化数组容量为16,存在扩容, 其append拼接字符串方法内部调用System的native方法,进行数组的拷贝,不会重新生成新的StringBuilder对象。它是非线程安全的字符串操作类,单线程操作字符串缓冲区 下操作大量数据
StringBuffer: 类内部维护可变长度char[], 基本上与StringBuilder一致,但其为线程安全的字符串操作类,大部分方法都采用了Synchronized关键字修改,实现在多线程下的操作字符串的安全性。多线程操作字符串缓冲区 下操作大量数据