参考链接: https://www.cnblogs.com/qing-gee/p/12090216.html
https://www.iteye.com/blog/wallimn-332947
https://zhidao.baidu.com/question/2208438210718855348.html
在学习 java 基础中 关于长度有三个东东 length length() size() 很容易混淆
String 类的 length() 方法 表示字符串的长度
ArrayList 类 size() 方法 表示集合的长度
奇怪的事情发生了
那么length 到底在哪呢??? 无论定义什么类型的数组都可以用length 属性
length 表示数组的长度
作为超类(上帝类) Objdect 中也没有 length 属性
在JDK的源码中 length这个属性 在各种数据类型 都直接或间接指向了String类中 char value[]
更奇怪的事情发生了
java 没有单独创建数组这个类 而且也找不到value.length 属性 是在哪一行代码里定义出来 直接就 value.length 这么硬(没办法谁让人家是JDK)
分析
可以想象下在String 类中 创建了char[] 字符数组 来存储 字符串
那么char 字符数组 是怎么创建出来的 个人感觉这个计算机底层有关
还有就是如果有数组这个类 那么也得有个地方(或者说容器)来存储数组里的数据
就好比一生二 二生三 三生万物 突然想知道 一是怎么来的
这里感觉是(借用沉默的王二的说法)java隐藏了 借用String类 直接定义了length的属性 省去了创建数组的类
最后看到了这个 https://www.iteye.com/blog/wallimn-332947 https://zhidao.baidu.com/question/2208438210718855348.html
------------------------------------------------------------------------------
1。length不是array的方法或者属性
这个很好证明:new个数组出来 getDeclaredFields()是0
2。java对数组的操作是指令级的。
------------------------------------------------------------------------------
这个涉及到编译原理的问题,我只能说,这是一个编译规范。在规范中比如:int[],中的int告诉计算机这是一个整型数据,[]告诉计算机这是一个连续存储的内存地址空间,简单点说一个连续数据的存储空间就是数组,数组只是一个名称!!当然我只是简略的这样说,实际上数组是很复杂的!!