黑马程序员技术交流社区
标题:
关于数组length
[打印本页]
作者:
tf0612
时间:
2015-10-20 16:54
标题:
关于数组length
在数组中有的属性length是在Java的哪一个类中的定义的?{:2_39:}
作者:
1126634865
时间:
2015-10-20 17:06
Object类
作者:
tf0612
时间:
2015-10-20 18:54
1126634865 发表于 2015-10-20 17:06
Object类
没看见有
作者:
yangshaoqiang
时间:
2015-10-20 19:02
你可以API查查看。是String类
作者:
1126634865
时间:
2015-10-20 19:10
yangshaoqiang 发表于 2015-10-20 19:02
你可以API查查看。是String类
那是方法,不是属性
作者:
小橙子
时间:
2015-10-20 19:16
查查API吧
作者:
大地z灵
时间:
2015-10-20 23:55
既不是方法,也不是属性,API里没有。
作者:
我若为神
时间:
2015-10-21 14:51
自己查查API吧
作者:
SF_NEVERMORE
时间:
2015-10-21 20:07
不知道,我是来看答案的
作者:
ppaapc
时间:
2015-10-21 20:17
下面从别处转来的,楼主看下吧
问题:在所有数组中有唯一的一个属性——length,那么这个属性是在Java的哪一个类中的呢?这些数组的这个属性是从哪来的?不明白。
答案:数组是Java特殊处理过的,
int i = args.length;
可以通过javap 看到指令为aload_0arraylengthistore_1return可见Java专门为Array定义了取得长度的指令了
------------------------------------------------------------------------------
数组的length即不是方法,也不是字段。
在一个数组对象上调用length,会被Java编译器编译成一条arraylength指令(Java binary code)。
而访问字段的语句会被编译成getfield或getstatic指令,调用方法的语句则会被编译成invokestatic,invokevirtual或invokespecial等指令。
Java字节码中有许多单独针对数组的指令,它们在其它任何非数组类型的对象上调用都是毫无意义的。
由此可见,它们本就不一样,不能等同起来直接进行对比。
------------------------------------------------------------------------------
1。length不是array的方法或者属性
这个很好证明:new个数组出来 getDeclaredFields()是0
2。java对数组的操作是指令级的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2