Object 数组 向下转型 ClassCastException
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Object 数组 向下转型 ClassCastException相关的知识,希望对你有一定的参考价值。
Object[] array1 = new Object[]1,2,3;
Integer[] i1 = (Integer[])array1;
出现转换异常
Object数组里面的元素可以单个去转换,为什么Object[]数组 不能转换成Int[]数组?
Integer[] i1 = (Integer[]) array1;
这样是不会出现问题的。
出现的异常个人觉得可以这么理解:
你Object类型的东西,里面可以放各种类型的数据,虽然这里你放的就是1,2,3 也就是你自己认为的整型,可是java编译器不这么认为,你也有可能在里面加一个字符型的数据a啊什么的,例如:
Object[] array1 = new Object[]1,2,3,"a";
Integer[] i1 = (Integer[]) array1;
他不会直接给你报错,当你运行时就出现错误,这样不知道你可以理解不 参考技术A Object[] array1 = new Object[]1,2,3;
Integer[] i1 = (Integer[])array1;
第一句:添加元素时,它是在判断你添加的元素是否是Object的实例或是其子类的实例,这个句肯定没有问题;
第二句:当做一个整体,array1和i1又没有关系,当然会强转异常了。 参考技术B 你这个属于强转
举例给你 一辆奔驰就是一辆汽车 但是一辆汽车不一定是奔驰,也可能是奥拓
里面的单个元素就是整形,可以转换为Integer,int与integer的关系不用我说了吧,一个是原始类型一个是封装类型,可以互相转换 参考技术C Object[] a1=new Integer[]1,2,3;
Integer[] a2=(Integer[])a1;
其实没有转化什么东西
只是让编译通过而已 参考技术D integer[]的父类不是object[]而是object
父类数组如何向下转型
父类数组里面装的是子类的对象,但是父类数组new的时候new的是父类数组
如下
Person[] people = new Student[]{new Student("田径", 77),new Student("田径", 77)};这个时候Student继承了Person
但是我们该如何转型成为Student数组,直接转换编译是不报错的,但是我想行您能明白运行是什么状况ClassCastException
所以我们该怎么办?
请看下面的方法
private static void change(Person[] people) { List<Student> list4 = (List) Arrays.asList(people); //Student[] students = new Student[100]; Student[] students = list4.toArray(new Student[0]); for(int i = 0 ; i < 2; i ++){ System.out.println(students[i]); } }
以上是关于Object 数组 向下转型 ClassCastException的主要内容,如果未能解决你的问题,请参考以下文章
java 强转对象 object向下转型自定义的类,为啥eclipse会报黄线?