六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 129|回复: 0

数组中length属性属于Java中哪一个类

[复制链接]

升级  10.8%

386

主题

386

主题

386

主题

探花

Rank: 6Rank: 6

积分
1216
 楼主| 发表于 2013-2-7 20:23:01 | 显示全部楼层 |阅读模式
原文地址: http://topic.csdn.net/u/20070606/15/b77a37ea-5b5b-49d1-8ab4-5968467a4a99.html

果子的研究能力真是很强啊!里面几位前辈的底层能力更是值得敬佩。

问题:
在所有数组中有唯一的一个属性——length,那么这个属性是在Java的哪一个类中的呢?这些数组的这个属性是从哪来的?不明白。



答案:
数组是Java特殊处理过的,
int   i   =   args.length;
  
可以通过javap   看到指令为
aload_0
arraylength
istore_1
return
  
  
可见Java专门为Array定义了取得长度的指令了

------------------------------------------------------------------------------
数组的length即不是方法,也不是字段。
在一个数组对象上调用length,会被Java编译器编译成一条arraylength指令(Java   binary   code)。
而访问字段的语句会被编译成getfield或getstatic指令,调用方法的语句则会被编译成invokestatic,invokevirtual或invokespecial等指令。


Java字节码中有许多单独针对数组的指令,它们在其它任何非数组类型的对象上调用都是毫无意义的。
由此可见,它们本就不一样,不能等同起来直接进行对比。

------------------------------------------------------------------------------
1。length不是array的方法或者属性
这个很好证明:new个数组出来   getDeclaredFields()是0
2。java对数组的操作是指令级的。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表