红颜莎娜
稍微简化一下,您可以认为它是一种特殊情况,而不是普通类(有点像基元,但不是)。字符串和所有集合都是类,因此获取大小,长度或类似内容的方法。我猜设计的原因是性能。如果他们今天创建了它,他们可能想出了一些类似数组支持的集合类。如果有人感兴趣,下面是一小段代码,以说明所生成代码中两者之间的区别,首先是源代码:public class LengthTest { public static void main(String[] args) { int[] array = {12,1,4}; String string = "Hoo"; System.out.println(array.length); System.out.println(string.length()); }}截断javap -c在类上运行的字节代码中不太重要的部分,最后两行将得到以下结果:20: getstatic #3; //Field java/lang/System.out:Ljava/io/PrintStream;23: aload_124: arraylength25: invokevirtual #4; //Method java/io/PrintStream.println:(I)V28: getstatic #3; //Field java/lang/System.out:Ljava/io/PrintStream;31: aload_232: invokevirtual #5; //Method java/lang/String.length:()I35: invokevirtual #4; //Method java/io/PrintStream.println:(I)V在第一种情况下(20-25),代码仅向JVM请求数组的大小(在JNI中,这将是对GetArrayLength()的调用),而在String情况下(28-35),它需要执行以下操作:方法调用以获取长度。在1990年代中期,如果没有良好的JIT和功能,仅使用java.util.Vector(或类似的东西),而不是像一个类却表现得并不快的语言构造,将完全丧失性能。他们当然可以将属性掩盖为方法调用并在编译器中进行处理,但是我认为在不是真正类的东西上使用方法会更加令人困惑。