营收|藏在Java数组的背后,你可能忽略的知识点( 四 )


在Java语言层面上 , arrS是数组也是一个对象那么它的类型应该是String[
, 这样说是合理的 。 但是在JVM中 , 他的类型为[java.lang.String 。 顺便说一句普通的类在JVM里的类型为 包名+类名 , 也就是全限定名 。 同一个类型在Java语言中和在虚拟机中的表示可能是不一样的 。
Java中数组的继承关系上面已经验证了 , 数组是对象 , 也就是说可以以操作对象的方式来操作数组 。 并且数组在虚拟机中有它特别的类型 。 既然是对象 , 遵循Java语言中的规则 -- Object是上帝 ,也就是说所有类的顶层父类都是Object 。 数组的顶层父类也必须是Object , 这就说明数组对象可以向上直接转型到Object , 也可以向下强制类型转换 , 也可以使用instanceof关键字做类型判定 。这一切都和普通对象一样 。 如下代码所示:
【营收|藏在Java数组的背后,你可能忽略的知识点】//1\t\t在test1()中已经测试得到以下结论: 数组也是对象 数组的顶层父类是Object 所以可以向上转型int[
a = new int[8
;
Object obj = a ; //数组的父类也是Object可以将a向上转型到Object//2\t\t那么能向下转型吗?int[
b = (int[
)obj;  //可以进行向下转型//3\t\t能使用instanceof关键字判定吗?if(obj instanceof int[
){  //可以用instanceof关键字进行类型判定
   System.out.println(\"obj的真实类型是int[
\");



推荐阅读