数组的length哪里来的

2019/12/24 15:50
阅读数 46

参考链接:    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告诉计算机这是一个整型数据,[]告诉计算机这是一个连续存储的内存地址空间,简单点说一个连续数据的存储空间就是数组,数组只是一个名称!!当然我只是简略的这样说,实际上数组是很复杂的!!

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部