gpt4 book ai didi

java - JVM 如何使用 ArrayName.length 属性计算数组长度?

转载 作者:行者123 更新时间:2023-11-30 20:00:23 25 4
gpt4 key购买 nike

根据我在 Java 中学到的知识,数组是作为引用传递的。这意味着指针在 java 内部使用。

在 C 中,每当我们在函数内传递数组时,它也是通过引用传递的,这就是为什么我们不能使用 sizeof() 运算符来计算它的大小。像这样,

第一种情况:->

#include<stdio.h>

int main(int argc, char** argv) {

int array[5];
printf("size of the array is: %lu\n", sizeof(array)/sizeof(int));

return 0;
}

输出将是

size of the array is: 5

第二种情况:->

#include<stdio.h>

void calculate_size(int *);
int main(int argc, char** argv) {

int array[5];
calculate_size(array);

return 0;
}

//Function definition...
void calculate_size(int p[]) {

printf("size of the array is: %lu\n", sizeof(p)/sizeof(int));

}

输出是

size of the array is: 2

在第一种情况下,它给了我们数组的精确长度,但在第二种情况下,长度是荒谬且错误的。

这是因为,数组在函数内部作为引用传递,因此基地址传递到这里。这就是为什么它导致 sizeof() 运算符考虑,上面的数组中只有单个元素,因此大小是根据该考虑来计算的。

现在 Java 也有同样的情况。在这里,数组也作为引用传递。那么“arrayname.length”属性如何计算它的长度。像这样,

//Java code snippet...

int array[10];
System.out.println("Length of the array is "+array.length);

即使在函数内部。你能给我详细解释一下吗?

最佳答案

Java 数组是对象,它嵌入(至少)长度字段和数组元素。因此,对数组的引用实际上是对该对象的引用,可以从中提取长度。

另一方面,C 数组本质上是未修饰的数组,因此不包含长度字段。使用 sizeof 来确定长度仅适用于编译器可以看到包含长度的声明的数组(而不是衰减的指针)(VLA 除外,它具有特殊处理)。

关于java - JVM 如何使用 ArrayName.length 属性计算数组长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45387065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com