美文网首页Java面试题
String, StringBuffer, StringBuil

String, StringBuffer, StringBuil

作者: fanderboy | 来源:发表于2020-07-17 14:53 被阅读0次

    String:不可变
    StringBuffer:可变的,线程安全
    StringBuilder:可变的,线程不安全

    可变性:
    String类使用Final关键字字符数组保存字符串,private final char[] value,所以String是不可变的;
    StringBuffer 和 StringBuilder 都是继承自AbstractStringBuilder,而AbstractStringBuilder 也是使用使用字符数组保护字符串,不过没有final关键字,char[] value,所以后两者是可变的。
    String:

    public final class String
        implements java.io.Serializable, Comparable<String>, CharSequence {
        /** The value is used for character storage. */
        private final char value[];
    
        /** Cache the hash code for the string */
        private int hash; // Default to 0
    

    AbstractStringBuilder :

    abstract class AbstractStringBuilder implements Appendable, CharSequence {
        /**
         * The value is used for character storage.
         */
        char[] value;
    
        /**
         * The count is the number of characters used.
         */
        int count;
    

    线程安全:
    String因为是不可变,也可理解为常量,因此是线程安全的。而StringBuffer 和 StringBuilder 继承自AbstractStringBuilder,而AbstractStringBuilder定义了一些基本字符操作,如append、insert、indexOf等,在StringBuffer的方法中加了同步锁,因此StringBuffer是线程安全的。而StringBuilder没有相应的锁,所以非线程安全。
    性能:
    String类型进行改变都是创建新的字符串代替旧的,而后两者都是在自身改变,所以性能要好于String。而StringBuilder因为没有加同步锁,所以性能略优于StringBuffer,但是会有线程不安全的风险

    总结:
    操作量少:String

    单线程操作量大:StringBuilder

    多线程操作量大:StringBuffer

    相关文章

      网友评论

        本文标题:String, StringBuffer, StringBuil

        本文链接:https://www.haomeiwen.com/subject/olpghktx.html