zoukankan      html  css  js  c++  java
  • 数组的length哪里来的

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

    古人学问无遗力,少壮工夫老始成。 纸上得来终觉浅,绝知此事要躬行。
  • 相关阅读:
    JavaScript数据结构——模仿ES6中定义的类似的Set类
    webpack简单的项目配置发生的错误
    三国
    把握中国经济的大局与动力
    人生道路
    C++
    https://计算机等级分类总结
    https://计算机四级
    https://计算机三级
    https://计算机二级
  • 原文地址:https://www.cnblogs.com/wf-zhang/p/12091955.html
Copyright © 2011-2022 走看看