java中数组有一个length属性.几乎所有人都是这样认为的,但事实上真的有吗?请看下面代码:
Object[] object = new Object[100];
int i = object.getClass().getDeclaredFields().length;
/* 为什么输出结果是0?这可不可以断定
* 数组中没有属性呢?
* 这说明length不是数组的属性
* 当然无论是不是属性,肯定不是方法
* */
System.out.println(i);//out:0
我的个人分析与理解:
第一、数组肯定是一个继承了Object的类,这点毋庸置疑
第二、length肯定不是方法
第三、length肯定也不是我们正常java类中的属性(除非反射有问题)
第四、有人可能说它是public static final int length = ? (此值编译的时候确定),即length是一个常量属性
但是看代码
Object[] object = new Object[100];
Field field = object.getClass().getField("length");//抛NoSuchFieldException
System.out.println(field.get(null));//得到常量的值
说明它不是常量
第五、我个人猜想length是一个标记,当创建一个数组的时候,就会有一个这样的标记来标记数组长度。而这个标记不是属性或者是常量。
希望各位大虾们拍砖,使劲的拍砖,谢谢