Java 字符串缓冲区到字符串转换异常?
您好,请检查下面的代码Java 字符串缓冲区到字符串转换异常?,java,arraylist,stringbuffer,Java,Arraylist,Stringbuffer,您好,请检查下面的代码 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(z.get(0)) 它正在工作 为什么会这样 关于您遇到问题的具体原因如下:
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(z.get(0))
它正在工作
为什么会这样 关于您遇到问题的具体原因如下:
- 已创建新的ArrayList,为空
- 所有元素都被键入y中的字符串
- 所有元素都被键入z中的StringBuffer
- 将向该数组列表中添加新元素
- JVM尝试将其强制转换为String和StringBuffer
- 因为“Strings”不是StringBuffer的实例,所以会抛出ClassCastException
ArrayList<StringBuffer> myArrayList = new ArrayList<StringBuffer>
如果您知道多一点,例如它将是另一个类的子类,请使用
ArrayList我假设您这样做是作为一个实验(如果不是,那么请阅读其他关于您应该如何编写代码的答案)
x是一个原始的ArrayList
,您可以在其中放置任何类型的对象
y.add(“字符串”)
添加字符串
z是一个ArrayList
,需要StringBuffers。当您调用z.get(0)
时,JVM会在返回它之前尝试将索引0处的元素强制转换为StringBuffer。那个演员阵容失败了
换句话说,尽管stringbuffers=z.get(0)代码>编译时,它将在运行时抛出ClassCastException,因为z.get(0)
不是StringBuffer
您试图实现什么?当您可以使用StringBuilder时,请不要使用StringBuffer。
ArrayList<StringBuffer> myArrayList = new ArrayList<StringBuffer>
ArrayList x=new ArrayList();
ArrayList<String>y=x;
ArrayList<StringBuffer>z=new ArrayList<StringBuffer>();
for(String s : y)
z.add(new StringBuffer(s));
ArrayList<?> x = new ArrayList<?>();