String、StringBuffer、StringBuilder 三者之间的区别
可变性:
- 当final修饰类的时候表示类不可以被继承,可以保护类不被修改.当final修饰变量的时候,变量在赋值后就不可以改变.
- String 中的用于保存内容成员变量 : private final char value[]// String 对象是不可变的
- StringBuilder StringBuffer 中的用于保存内容成员变量: char[] value //可以修改
线程安全性:
- 线程安全问题:多个线程共享内存资源。当其并发访问同一个值可变的内存地址时,会由于读取和修改不同时进行产生安全问题.
- String:由于内容不可变,所以线程安全
- StringBuffer:加了同步锁,线程安全
- StringBuilder:线程不安全
性能:
- String:每次String对象改变会生成新的String对象,性能最低
- StringBuilder 和 StringBuffer 底层方法功能相同 StringBuffer 方法大多采用
synchronized 修饰,线程安全
对于三者使用的总结:
- String:少量数据
- StringBuilder:单线程操作缓冲区大量数据
- StringBuffer:多线程操作大量数据