从源码角度记忆length和length(),size()

  • 从源码角度记忆length和length(),size()

public int romanToInt(String s) {

        int roman_sum=0;

        for (int i = 0; i < s.length(); i++) {

System.out.println(s.charAt(i));

}

 

Ctrl(点进查看源码)------length() 

源码如下:

public final class String{

private final char value[];

public int length() {

        return value.length;

}

}

 

可见length()是String类的一个方法,而length是数组的一个属性吗? 

数组长度是可以动态改变的,如果是属性的话,如何实现动态变化?

故数组的length即不是方法,也不是字段。
在一个数组对象上调用length,会被Java编译器编译成一条arraylength指令(Java binary code)。
而访问字段的语句会被编译成getfield或getstatic指令,调用方法的语句则会被编译成invokestatic,invokevirtual或invokespecial等指令。
Java字节码中有许多单独针对数组的指令,它们在其它任何非数组类型的对象上调用都是毫无意义的。
由此可见,它们本就不一样,不能等同起来直接进行对比。

 

Conclusion:

1。length不是array的方法或者属性
2。java对数组的操作是指令级的。

 

  •  Size()

JDK1.8 ArrayList源码浅析

 

https://www.cnblogs.com/dougest/p/7058258.html

 

size()方法是针对泛型集合说的,size()表示泛型有多少个元素

 

posted @ 2020-03-18 09:53  今天不上班  阅读(399)  评论(0)    收藏  举报