java数组中的length属性到底属于java中的哪个类
2017-08-03 18:43
274 查看
原文地址: 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对数组的操作是指令级的。
果子的研究能力真是很强啊!里面几位前辈的底层能力更是值得敬佩。
问题:
在所有数组中有唯一的一个属性——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属性属于Java中哪一个类
- 数组的 length 属性详解——JAVA
- java中数组的length属性的返回值探究
- Java数组中length到底是什么
- JAVA数组的length属性
- java中的length属性和length()方法和size()方法(转载)
- JAVA length属性和length()方法和size()方法的区别详解
- java数组中length
- java中length属性,length()方法和size()的方法的区别
- java中的file.encoding属性到底由什么决定?
- java中的length属性和length()方法和size()方法
- JAVA中的length属性与length()方法
- Java整型数组的最大长度到底有多长?
- 关于java定义属性数组的心得
- Java面向对象【经典案例】类的属性是属于对象的,方法是动态绑定到对象的
- js数组length属性失效
- JAVA中的length属性和length()方法和size()方法的区别
- js中数组的length属性
- javascript巧用数组length属性清空和截短数组
- 数组中Length、Rank属性与Sort、Reverse方法