StringBuilder和CharSequence的ClassCastException

Rol*_*all 1 java string stringbuilder charsequence

为什么以下代码将产生一个很好的ClassCastException:

public static void main(String []args){
        StringBuilder s1 = new StringBuilder("quaqua");
        StringBuilder s12= (StringBuilder)s1.subSequence(0,3);
        System.out.println(s12);
     }
Run Code Online (Sandbox Code Playgroud)

而以下代码(用String替换StringBuilder):

public static void main(String []args){
        String s1 = new String("quaqua");
        String s12= (String)s1.subSequence(0,3);
        System.out.println(s12);
     }
Run Code Online (Sandbox Code Playgroud)

工作良好?;

我知道有方法substring(int begin, int end);然而我只是好奇为什么使用StringBuilder(实现CharSequence)的强制转换不起作用而使用String工作.

提前致谢.

Evg*_*eev 7

这是因为StringBuilder.subSequence返回的实际类是String:

...
public CharSequence subSequence(int start, int end) {
    return substring(start, end);
}

public String substring(int start, int end) {
    ...
    return new String(value, start, end - start);
}
Run Code Online (Sandbox Code Playgroud)

您不能将String强制转换为StringBuilder.