这个问题可以从三个角度来阐述:
- 可变性 :对于String来说,是把数据存放在了常量池中,因为所有的String,默认都是以常量形式保存,且由final修饰,当修改String的时候并不是在之前的字符串上修改,而是新生成一个字符串。而StringBuffer和StringBuilder属于可变类,字符串的修改和变更不会产生新的对象。
- 线程安全性:String因为他的不可变性,每次修改都是创建一个新的对象所以它是线程安全的,StringBuffer因为给每一个方法都加了synchronize关键字,所以他是线程安全的,StringBuilder不是线程安全的。
- 性能:String的性能是最低的,因为每次修改都要新生成对象,所以效率最低;其次是StringBuffer,它和StringBuilder都继承于AbstractStringBuilder,但是它给每个方法都加上了synchronize关键字,所以性能要低于StringBuilder;性能最好的就是StringBuilder。
String StringBuffer StringBuilder 可变性 不可变 可变 可变 线程安全 线程安全 线程安全 线程不安全 性能 低 中 高