public class Test {    public static void main(String[] args) {
        ArrayList strList = new ArrayList();
        strList.add("one");
        strList.add("two");
        strList.add("three");        String[] strArray = (String[]) strList.toArray();
    }
}运行时报错:java.lang.ClassCastException
at temp.Test.main(Test.java:19)
Exception in thread "main"
请问这是什么原因?

解决方案 »

  1.   

    优先级的原因
    .的优先级 比 ()强制转换 高
    所以 (String[]) strList.toArray();系统执行的其实是(String[])(strList.toArray())
    这样把一个String强制转换成数组,当然是出现ClassCastException异常了
    你应该写成((String[]) strList).toArray();
      

  2.   

    楼上的正解。strList.toArray();返回的是一个Object[],并不是String[](尽管Object[]中的每个元素的确是String,但是整个数组类型却是Object)所以,转化的时候才会出错。
      

  3.   

    ArrayList strList = new ArrayList();
            strList.add("one");
            strList.add("two");
            strList.add("three");        String[] strArray = new String[strList.size()];
            strList.toArray(strArray);
      

  4.   

    补充下,任何数组都可以直接转换成Object数组的,但反过来却不可以