黑马程序员技术交流社区

标题: 类型转换异常 [打印本页]

作者: 忘记了    时间: 2013-12-24 00:02
标题: 类型转换异常
本帖最后由 忘记了 于 2013-12-24 21:04 编辑

  1. public class IteratorDemo {
  2.         public static void main(String[] args) {
  3.                 Collection c=new ArrayList();
  4.                 c.add("哈哈");
  5.                 c.add("嘎嘎");
  6.                 c.add("拉拉");
  7.                 //方式一
  8.                 String[] ss=(String[])(c.toArray());        //类型转换异常,为什么运行时会异常?
  9.                 for(int i=0;i<ss.length;i++){
  10.                         String s=ss[i];
  11.                         System.out.println(s);
  12.                 }
  13.         }
  14. }
复制代码

作者: 唐侠君    时间: 2013-12-24 00:25
String[] ss=(String[])(c.toArray());  这句代码的目的是把集合变数组吧,集合变数组用的是collection接口中的toArray()方法,改为String[] ss=c.toArray(new String[c.size()]); 就可以了,   
作者: 迪兰奇迹    时间: 2013-12-24 14:06
public class IteratorDemo {
        public static void main(String[] args) {
                Collection c=new ArrayList();
                c.add("哈哈");
                c.add("嘎嘎");
                c.add("拉拉");
                c.add(1);//1经过自动装箱变为Integer对象了!
                String[] ss=(String[]) c.toArray(new String[c.size()]);
                for(int i=0;i<ss.length;i++){
                        String s=ss;
                        System.out.println(s);
                }
        }
}
楼主通过c.toArray()方法将集合转成了一个Object[],那么虚拟机就知道Object[]这是一个"混合兵团",
里边有步兵,有装甲兵,还有侦查兵,然后楼主想通过强转操作将这支混合兵团转成"步兵兵团",那些
装甲兵和侦查兵他们可干不了步兵,所以强转失败了!
    虽然楼主心里清楚这支部队虽然名番号上是"混合兵团"但里边只有步兵,但是虚拟机不知道啊,所以
他不让你强转!但是虚拟机考虑到上边这种特殊情况,所以给了另外一中方法达到Object[]转为String[]
的目的,那就是楼上说的方法了!但是这种方法的使用必须满足"混合兵团"里边只有步兵这种情况,如果
还有其他兵种,运行时会报 java.lang.ArrayStoreException异常!(比如集合中有Integer对象!)


作者: 忘记了    时间: 2013-12-24 21:12
迪兰奇迹 发表于 2013-12-24 14:06
public class IteratorDemo {
        public static void main(String[] args) {
                Collect ...

强悍,我居然看懂了~
作者: 迪兰奇迹    时间: 2013-12-24 21:42
{:soso_e113:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2