你有沒有想過: 爲什麼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 類是用數組的數據結構來存儲字符串的

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