如何理解数组的length?
Java中的数组其实也是一个对象,但是确实是一个特殊的对象,实在是太特殊了,
以致我们都不好把它多做对象处理。
1.数组是对象,继承自Object
唯一比Object多一个成员变量length,而且应该是public的。
2.java.lang.reflect.Array是final的,所以数组肯定不是它的子类
这个类用来动态生成数组或者操作数组(获得长度等).
3.java.util.Arrays是一个数组操作应用类,主要就是排序,填充,而分查找等。
注意:排序使用的是快速排序,时间复杂度是o(n*log(n)),如果你要对数组排序
Arrays绝对是首选。
4.数组没有对应的类文件,String对应String.class.但是数组却没有,而且他们的
类名字很古怪,可以这样获得 new int[2].getClass().getName();
这是和其他对象最大的不同点,因为数组类是在运行时生成的。
5.数组的length是什么?
第一步:我们确定数组的父类是Object,
new Object[0].getClass().getSuperClass() 是Object.class
很显然Object没有length变量,所以应该是数组中的成员变量
第二步:new Object[0].getClass().getDeclaredFields() 返回的数组长度
为0,这里我们自然动态活动这个数组的Class,但是结果证明这个Class里没有
对length的定义,这个完全和第一步得出的违背。
第三步:很显然第一步和第二步是想矛盾的,但是第一步的分析完全没有错呀。
我也无法知道究竟是怎么回事,这里有两种可能,我比较支持第二步的结果。
数组类根本没有length成员变量,这样就和第二步的结果相同
对于 Object[] objs=new Object[2];
这个数组对象很显然和一般的对象不一样,一般的构造函数不是这个样子的。
对于 int i=objs.length;
因为我猜测是数组类是没有length成员的,但是这里却明明可以调用,我觉得
这里是编译器处理过的,他会在编译时把数组的length调用转化成一个方法
调用,比如Array.getLength(obj);虽然我试图用这两种方法编译成class文件
后用javap得到不同的JVM指令,我仍然觉得是编译器处理的数组的length!
如果我是错的,谁能帮我解释一下第二步发生的事!
android 数组length怎么获取
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
下一篇:深度学习中优化算法的作用
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
数组 [length] type
数组,长度不可变长度和变量类型都属于数组的属性
golang 初始化 数组 值类型 其他 -
JS中数组(Array)、Json对象长度(length)获取方法
7c94c5"};var length = Object.key.
ecmascript json 数组 Data