解答:
因为 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 类是用数组的数据结构来存储字符串的。