java基础之String、StringBuffer、StringBuilder


简述

  • 相同点:

    1.都可以用来操作字符串

    2.都使用字符数组保存字符串

    3.都是final类型的
  • 不同点:

    1.对象是否可变:String对象不可变,StringBuffer/StringBuilder对象是可变的

    2.线程是否安全:String/StringBuffer是线程安全的,StringBuilder是非线程安全的

上边说的很多人都清楚,面试宝典上也有的说,但为什么可变为什么不可变?线程的安全与否?估计有部分人还是不清楚的吧,下边就说一说

详解

  • 可变不可变

    虽然上边三个都是final类型的,但是用来保存字符串的字符数组的修饰符却是不一样的,因此结局也就不一样了

    1.String类中:如下所示,String类被"final"修饰,所以String对象是不可变的

    private final char value[];

    2.StringBuilder和StringBuffer:

    char[] value
  • 是否线程安全

    1.String对象是不可变的,相当于常量,所以是线程安全的。

    2.StringBuffer对方法加了同步锁,所以是线程安全的。

    3.StringBuilder没有对方法加同步锁,所以是非线程安全的。
  • 如果不考虑线程,StringBuilder效率高于StringBuffer。

原文地址:https://www.cnblogs.com/gosun/p/7371728.html