Object 数组 向下转型 ClassCastException

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Object 数组 向下转型 ClassCastException相关的知识,希望对你有一定的参考价值。

Object[] array1 = new Object[]1,2,3;

Integer[] i1 = (Integer[])array1;
出现转换异常
Object数组里面的元素可以单个去转换,为什么Object[]数组 不能转换成Int[]数组?

Object[] array1 = new Integer[]1,2,3;
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会报黄线?

向上转型,向下转型

Object类型转换成自定义类型(向下转型)

问下向下转型作用

关于JAVA的Object类接收引用和对象向下转型关系的疑问

父类数组如何向下转型