关于.length和.length()

曾一度以为是简单的问题,只知道老师说记住就行,但并不知道其中的原理,只知道String底层使用的是char数组,但并不知道String的length()方法的.length从何而来

public int length() {return value.length;
}

观察一下代码

char a[]={'1','2','3'};
Class class1=a.getClass();
System.out.println(class1.getName());int  b[]=new int[1];
Class class2=b.getClass();
System.out.println(class2.getName());

其结果是:

[C
[I

这是利用反射查看char数组和int数组的类,真是一个奇怪的类名
简单的说,数组的类名由若干个’[‘和数组元素类型的内部名称组成,’['的数目代表了数组的维度。

观察一下代码

int  b[]=new int[1];
Class class2=b.getClass();
System.out.println(class2.getName());
System.out.println(class2.getDeclaredFields().length);//所有字段组成的Field数组
System.out.println(class2.getDeclaredMethods().length);//所有方法组成的Method数组
System.out.println(class2.getDeclaredConstructors().length);//所有构造方法组成的Constructor数组
System.out.println(class2.getDeclaredAnnotations().length);//所有注解
System.out.println(class2.getDeclaredClasses().length);
//返回 Class 对象的一个数组,这些对象反映声明为此 Class 对象所表示的类的成员的所有类和接口。
System.out.println(class2.getSuperclass());//返回父类

其结果是:

[I
0
0
0
0
0
class java.lang.Object

由此可见,数组的类的内容为空,且父类是Object
那么数组的类在哪里呢?
答案是在JVM中自动创建,并且类中并没有length成员变量,由代码反编译(字节码文件.class)可以知道
JVM的知识还没有学到,以下内容转载自记忆犹新的博客

public class Main {  public static void main(String[] args) {  int a[] = new int[2];  int i = a.length;  }
}  

编译上述代码,并使用jclasslib打开Main.class文件,得到main方法的字节码:

0 iconst_2 //将int型常量2压入操作数栈
1 newarray 10 (int) //将2弹出操作数栈,作为长度,创建一个元素类型为int, 维度为1的数组,并将数组的引用压入操作数栈
3 astore_1 //将数组的引用从操作数栈中弹出,保存在索引为1的局部变量(即a)中
4 aload_1 //将索引为1的局部变量(即a)压入操作数栈
5 arraylength //从操作数栈弹出数组引用(即a),并获取其长度(JVM负责实现如何获取),并将长度压入操作数栈
6 istore_2 //将数组长度从操作数栈弹出,保存在索引为2的局部变量(即i)中
7 return //main方法返回

有看见length这个成员变量,获取数组长度是由一条特定的指令arraylength实现。编译器对Array.length这样的语法做了特殊处理,直接编译成了arraylength指令。另外,JVM创建数组类,应该就是由newarray这条指令触发的了。

小结,.length是由JVM实现的…

关于.length和.length()相关推荐

  1. c++获取数组长度_灵魂拷问:Java如何获取数组和字符串的长度?length还是length()?...

    限时 1 秒钟给出答案,来来来,听我口令:"Java 如何获取数组和字符串的长度?length 还是 length()?" 在逛 programcreek 的时候,我发现了上面这个 ...

  2. length与length()的区别

    在写代码的时候,知道length与length()都是求长度,但是有的地方用length,有的地方用length():写反了eclipse就会报错 有必要记一下加以区分: length用于计算数组的长 ...

  3. length () 和 length 的区别

    今天老师在 PTA 发布了第一个 JAVA 的题目集,做了之后发现还是有很多概念不清容易混淆的东西,还是做做笔记的好: length () 和 length 的区别: length () 确实是用于获 ...

  4. 关于length与length()

    关于length与length()的区别,length是用来获取数组的长度,length()是用来获取字符串的长度.在java中可以定义String类型的字符串和String[]类型的数组,在获取字符 ...

  5. java中length和length()方法的区别

    在Java中, length方法用于获取数组的长度. int[] arr = new int[10]; System.out.println(arr.length); 而length()用于获取Str ...

  6. size(),length和length()的区别(最详细版)

    首先区分一下length和length(): length不是方法,是属性,数组的属性: public static void main(String[] args) {int[] intArray ...

  7. Java中length、length()、size()区别

    记某一次刷题: 计算下字符串的长度,哦哦简单嘛,然后一写 int len=str.length; 咦?怎么报错了,那再加上**()括号**试试把 int len=str.length(); 编译通过了 ...

  8. Java中的.length与.length()

    目录 一. .length 1. .length究竟有多长? 2. 为什么会有.length呢? 3. 二维数组的创建方法 4. 数组是对象 二. .length() 1. .length()怎么用呢 ...

  9. java创建byte数组_java.创建一个byte数组,long length = file.length(); byte[] bytes =

    导航:网站首页 > java.创建一个byte数组,long length = file.length(); byte[] bytes = 时间:2017-12-17 java.创建一个byte ...

最新文章

  1. 这份深度学习课程笔记获吴恩达点赞
  2. linux生成ext4镜像,mkfs.ext4生成分区镜像自动把文件转成了sparse怎么破?
  3. sscanf操作字符串和整型的区别
  4. 如何把html转换成音频网址,怎么把视频转换成音频 视频转换成mp3
  5. Jenkins构建Spring+Nodejs项目
  6. 好的,每个接触Java字节码的人
  7. Linux 下压缩与解压.zip 和 .rar
  8. 计算机网络课程设计之网络代理服务器的设计与实现
  9. matlab求微分方程精确解,matlab求微分方程精确解及近似解.ppt
  10. 五步法建设你的数据中台
  11. 身份证号校验、身份证照片解析(百度API)
  12. oracle asm的安装和配置,ORACLE安装之ASM安装
  13. 游程编码用matlab实现代码_二值图像游程编码算法的Matlab实现 -
  14. svn异常:Aborting commit: 'xxx' remains in conflict
  15. 论文翻译:2021_TSCN:Decoupling magnitude and phase optimization with a two-stage deep network
  16. 2011年国外最受欢迎的15个电影网站
  17. 微信Web工具可以打开网页,用微信客户端就打不开了
  18. Restful 风格请求
  19. AD从原理图到PCB超详细教程
  20. IPv6的HappyEyeballs算法

热门文章

  1. IntelliJ IDEA 官方网站
  2. 关于Python常用的办公自动化技巧
  3. 软件著作权的转让问题
  4. 新一代科学计算与系统建模仿真平台MWORKS发布预告
  5. 曝新款苹果手机将采用低功耗微处理器,Find My定位在关机状态下也能使用
  6. 西南交大大学生营养早餐优化食谱
  7. Python手册(Machine Learning)--statsmodels(Regression)
  8. 单组学的多变量分析|1.PCA和PLS-DA
  9. 如何在网站上设置在线QQ客服
  10. Excel自动转曲线图的时PHP,Excel折线图随着数据的插入动态变化,掌握此技能的人不足1﹪!...