你有没有想过: 为什么Java中String类实例化之后就不能改变它的内容了?

解答
因为 String 在通过 new 的构造方式实例化的时候,在底层会用一个 private final 修饰的字符数组来存储字符串,该字符数组用了 final 来修饰所以是不可变的。

public final class String implements Serializable, Comparable<String>, CharSequence {
    private final char[] value; // 用 final 修饰的字符数组存储字符串
    private int hash;
    private static final long serialVersionUID = -6849794470754667710L;
    
    public String() {
        this.value = "".value; 
    }

    public String(String var1) {
        this.value = var1.value;
        this.hash = var1.hash;
    }

    public String(char[] var1) {
        this.value = Arrays.copyOf(var1, var1.length);
    }
    ......
}

面试问题:String 类是用什么数据结构来存储字符串的?
由上面 String 的源码可见,String 类是用数组的数据结构来存储字符串的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章