欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

有关java数组强制类型转换的问题

程序员文章站 2022-04-11 11:55:18
...
/**
    会报异常Exception in thread "main" java.lang.ClassCastException: java.base/[Ljava.lang.Object; cannot be cast to java.base/[Ljava.lang.String;
*/
 Object[] newArray = new Object[]{"AAA","BBB"};
 String[]q=(String[])(newArray);

为什么会报异常呢,先要理解几个概念:

1:在java中数组也是类,

2:强制类型转换成功的条件是 :被强制类型转换的实例需要是强制类型转换类型的类或者其子类。

     /**
        结果全是Object
        */
     System.out.println(new int[5].getClass().getSuperclass());
     System.out.println(new Integer[5].getClass().getSuperclass());
     System.out.println(new Object[5].getClass().getSuperclass());

3:一切类的父类是Object,数组类也不例外

4:Java 数组会记住每个元素的类型, 即创建数组时 new 表达式中使用的元素类型

    一维类数组存放的是一组连续的地址引用,因此如果是取返回的Object数组其中每一个进行强制类型转换也没问题,因为每一个含义是Object s=new String("AAA"); 底层没有问题,但Object[]new Array=new Object[]类型就定下来了是Object类型,也就只能确定newArray引用的是个Object[]类型但不知道是具体那个类型,因为要在内存开辟空间,因此强制类型转换成String[]也就出错.

同理

/*
这就没错
*/
 Object[] newArray = new String[]{"AAA","BBB"};
 String[]q=(String[])(newArray);