美文网首页
数组之length

数组之length

作者: 998584f56259 | 来源:发表于2016-08-09 21:48 被阅读17次

** (一)问题:**
在所有数组中有唯一的一个属性——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对数组的操作是指令级的。

相关文章

网友评论

      本文标题:数组之length

      本文链接:https://www.haomeiwen.com/subject/dsvdsttx.html