Java 中 array.length() 的内部代码是什么?

ran*_*arr 3 java arrays

存储在数组的第 10 个位置的内容说

int[] array=new int[10];
Run Code Online (Sandbox Code Playgroud)

假设我们有从array[0]to存储的值array[9],如果我要打印元素而不使用

array.length()
Run Code Online (Sandbox Code Playgroud)

或者 for (int a: array)

我该如何进行?

我的基本问题是 JVM 如何确定数组的结尾,是在解析数组时遇到空值还是遇到垃圾值?什么是array.length()函数的内置代码?

Ber*_*t F 5

什么存储在数组的第 10 个位置说......我的基本问题是 JVM 将如何确定数组的结尾,是在解析数组时遇到空值还是遇到垃圾值?array.length() 函数的内置代码是什么?

欢迎 C/C++ 程序员 :-)

Java 使用与 C/C++ 不同的范式来处理数组。C/C++ 使用终结符/哨兵,又名“垃圾”)值,如 NULL 来指示数组的结尾。在 Java 中,数组更像是具有特殊“实例变量”之类的变量的对象,该变量length指示数组中有多少个插槽。这个特殊的“实例变量”是在创建数组时设置的,并且是只读的。它可以通过说 array 来访问.length

Java 希望代码通过确保它们不指定大于 的索引来知道何时在数组末尾停止length - 1。但是,出于安全原因,JVM 会检查对数组的每次访问以防万一。如果 JVM 找到小于0或大于的数组索引length - 1,则 JVM 将抛出IndexOutOfBoundsException.

什么存储在数组的第 10 个位置

由于我们始终可以检查长度,因此 Java 中不需要在数组末尾添加标记。数组中的最后一项之后没有什么特别的(它可能是其他变量的内存)。

如果我要在不使用的情况下打印元素 array.length()

for(int a: array) {
    // code of loop body here
}
Run Code Online (Sandbox Code Playgroud)

这段代码被编译器神奇地转换为:

for (int i = 0; i < array.length; i++) {
    int a = array[i];
    // code of loop body here
}
Run Code Online (Sandbox Code Playgroud)

但是,i用户代码无法访问索引变量。此代码仍隐式使用 array.length。