你好检查下面的代码
ArrayList x=new ArrayList();
ArrayList<String>y=x;
ArrayList<StringBuffer>z=x;
y.add("Strings");
System.out.println(z.get(0).toString());
我在 System.out.println 得到类转换异常
java.lang.ClassCastException: java.lang.String
at com.one.MainClass.main(MainClass.java:16)
但是当我尝试的时候
System.out.println(z.get(0))
它正在工作 为什么会这样??
最佳答案
我假设您是在做实验(如果不是,请阅读其他关于您应该如何编写代码的答案)。
x 是一个原始的 ArrayList
,您可以在其中放置任何类型的对象。
y.add("string")
添加一个字符串。
z 是一个 ArrayList<StringBuffer>
并期待 StringBuffers。当您调用 z.get(0)
,JVM 在返回之前尝试将索引 0 处的元素转换为 StringBuffer。该转换失败。
换句话说,虽然StringBuffer s = z.get(0);
编译,它会在运行时抛出 ClassCastException 因为 z.get(0)
不是 StringBuffer
.
关于java - 字符串缓冲区到字符串转换异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11817744/