Java中数组的类型

Java是一种强类型的语言。既然是对象, 那么就必须属于一个类型,比如根据Person类创建一个对象,这个对象的类型就是Person。那么数组的类型是什么呢?看下面的代码:
[java]  view plain copy
  1. int[] a1 = {1234};  
  2. System.out.println(a1.getClass().getName());  
  3. //打印出的数组类的名字为[I  
  4.   
  5. String[] s = new String[2];  
  6. System.out.println(s.getClass().getName());  
  7. //打印出的数组类的名字为  [Ljava.lang.String;  
  8.   
  9. String[][] ss = new String[2][3];  
  10. System.out.println(ss.getClass().getName());  
  11. //打印出的数组类的名字为    [[Ljava.lang.String;  

打印出a1的类型为[ I ,s 的类型是[Ljava.lang.String;  ,  ss的类型是[[Ljava.lang.String;  

所以, 数组也是有类型的。只是这个类型显得比较奇怪。你可以说a1的类型是int[],这也无可厚非。但是我们没有自己创建这个类,也没有在Java的标准库中找到这个类。也就是说不管是我们自己的代码,还是在JDK中,都没有如下定义:
[java]  view plain copy
  1. public class int[] {  
  2.       
  3.     // ...  
  4.       
  5.     // ...  
  6.       
  7.     // ...  
  8. }  

这只能有一个解释,那就是 虚拟机自动创建了数组类型,可以把数组类型和8种基本数据类型一样, 当做java的内建类型。这种类型的命名规则是这样的:

每一维度用一个[表示;开头两个[,就代表是二维数组。
[后面是数组中元素的类型(包括基本数据类型和引用数据类型)

在java语言层面上,s是数组,也是一个对象,那么他的类型应该是String[],这样说是合理的。但是在JVM中,他的类型为[java.lang.String。顺便说一句普通的类在JVM里的类型为 包名+类名,也就是全限定名。同一个类型在java语言中和在虚拟机中的表示可能是不一样的。


Java中数组的继承关系


上面已经验证了,数组是对象,也就是说可以以操作对象的方式来操作数组。并且数组在虚拟机中有它特别的类型。既然是对象,遵循Java语言中的规则 -- Object是上帝, 也就是说所有类的顶层父类都是Object。数组的顶层父类也必须是Object,这就说明数组对象可以向上直接转型到Object,也可以向下强制类型转换,也可以使用instanceof关键字做类型判定。 这一切都和普通对象一样。如下代码所示:

[java]  view plain copy
  1. //1     在test1()中已经测试得到以下结论: 数组也是对象, 数组的顶层父类是Object, 所以可以向上转型  
  2. int[] a = new int[8];  
  3. Object obj = a ; //数组的父类也是Object,可以将a向上转型到Object  
  4.   
  5. //2     那么能向下转型吗?  
  6. int[] b = (int[])obj;  //可以进行向下转型  
  7.   
  8. //3     能使用instanceof关键字判定吗?  
  9. if(obj instanceof int[]){  //可以用instanceof关键字进行类型判定  
  10.     System.out.println("obj的真实类型是int[]");  
  11. }  

Java中数组的另一种“继承”关系


如下代码是正确的,却很容易让我们疑惑:
[java]  view plain copy
  1. String[] s = new String[5];  
  2. Object[] obja = s;   //成立,说明可以用Object[]的引用来接收String[]的对象  

Object[]类型的引用可以指向String[]类型的数组对象? 由上文的验证可以得知数组类型的顶层父类一定是Object,那么上面代码中s的直接父类是谁呢?难道说String[]继承自Object[],而Object[]又继承自Object? 让我们通过反射的方式来验证这个问题:
http://poanga808.blog.com
http://bailefan11.blog.com
http://q756888.blog.com
http://yunron6117.blog.com
http://yuanch271.blog.com
http://aza8888.blog.com
http://kemuza497.blog.com
http://tt1166s.blog.com/
http://hekena862.blog.com
http://xsd6666.blog.com
http://laoshupa7212.blog.com
http://xsd661.blog.com
http://xiazha878.blog.com
http://azxc888.blog.com
http://tanyingj892507.blog.com
http://asdi8881.blog.com
http://jibiji676.blog.com
http://kiu8555.blog.com/
http://mupintuo7866.blog.com
http://qi78121.blog.com/
http://youmei490.blog.com
http://agg881.blog.com/
http://chaona540.blog.com
http://oi9a5178.blog.com
http://shenwe062.blog.com
http://ki8a777.blog.com
http://weiyuanjiao0145.blog.com
http://k89a.blog.com
http://yongtuijiao6843.blog.com
http://w9i91.blog.com/
http://yuanmimu803.blog.com
http://yingfeng6633.blog.com/
http://naozhangrao7495.blog.com
http://ki71211.blog.com
http://pogoux875.blog.com
http://dai711.blog.com/
http://jiusonglia767.blog.com
http://ji881q.blog.com
http://toumushi445.blog.com
http://u87uq.blog.com
http://fanyishan679.blog.com
http://asi8112.blog.com
http://bihanlie24756.blog.com
http://aobo812.blog.com
http://liangdanzi105956.blog.com
http://xinaob9.blog.com
http://dianliao471.blog.com
http://lxi712w.blog.com
http://yihuaimu480.blog.com
http://qq82212.blog.com
http://lujiaj816.blog.com
http://ai81221.blog.com
http://koukeq877.blog.com
http://ssc891.blog.com
http://henash001.blog.com
http://zhy1121.blog.com
http://tuxiancai081.blog.com
http://m881ww.blog.com
http://zilaoq609.blog.com
http://vn008tg.blog.com
http://pinleika759193.blog.com
http://lza68718.blog.com
http://baohao057.blog.com
http://hd8712.blog.com
http://shanhu641.blog.com
http://lo91sa.blog.com
http://siliangjia708.blog.com
http://dawj7788.blog.com/
http://zhitanyi860.blog.com
http://ybh9999.blog.com
http://guanch606.blog.com
http://ybh5555.blog.com
http://shailunyou2695.blog.com
http://youa55.blog.com
http://xianwenyan4288.blog.com
http://u1w88.blog.com
http://whbjnfzlyb9177.blog.com
http://ru7811.blog.com
http://shanzhidi476.blog.com
http://rk6688.blog.com
http://shilanguai49812.blog.com
http://gy112q.blog.com
http://fanzha065.blog.com
http://baijiabo1.blog.com
http://feijum413.blog.com
http://ksiw84.blog.com
http://ieqrfhpvzl9880.blog.com
http://cs508vip.blog.com
http://fanbishi366.blog.com
http://xsj6688.blog.com
http://siyanz935.blog.com
http://bet091.blog.com
http://huanch510.blog.com
http://lmmy789.blog.com
http://doubeigu7064.blog.com
http://ac509.blog.com/
http://langwe316.blog.com
http://kelake6688.blog.com
http://zhaomo371.blog.com
http://gfcasino.blog.com
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值