java数组中的length到底是属性还是方法???【转载】

原文地址: 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对数组的操作是指令级的。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值