你能说一下String,StringBuffer,StringBuilder三者之间的区别吗?【自学Java准备面试】【自用】

58 阅读1分钟

image.png 答案:

  • 可变性和线程安全

    • String是字符串常量,它的底层是final修饰的字符数组,private final char value[],是不可变的,保存在常量池中,所以它天然线程安全,字符串设计成immutable(不可变)是为了字符串共享,缺点就是在编辑字符串的时候效率很低。
    • StringBuffer和StringBuilder是字符串变量,它们保存在堆内存中,它们派生自AbstractStringBuiler,都实现了expandCapacity、append、insert、indexOf 等公共方法,但是StringBuffer对方法加了Synchronized同步锁,所以他是线程安全的,而StringBuilder并没有对方法加Synchronized同步锁,所以它不是线程安全的。
  • 如何选用

    • 如果不需要频繁的操作字符串选用String
    • 多线程情况下大量操作字符串选用StringBuffer
    • 单线程情况下大量操作字符串选用StringBuilder
  • 升华

    • String是在Java 1.0版本引入的,StringBuffer是Java 2.0版本引入的,StringBuilder是Java 5.0版本引入的,可见Java对字符串的处理能力越来越强。

参考回答

image.png