String、StringBuffer、StringBuilder的区别

这个问题可以从三个角度来阐述:

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

你可能感兴趣的:(java,jvm,开发语言)