私がJavaで学んだことは、配列が参照として渡されることです。 つまり、ポインタはJavaで内部的に使用されます。JVMはどのようにArrayName.lengthプロパティを使用して配列の長さを計算できますか?
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
最初のケースでは配列の正確な長さが与えられていますが、2番目のケースでは長さは不合理で間違っています。
これは、配列が関数内で参照として渡されるため、ここでベースアドレスが渡されるからです。そのため、sizeof()演算子は、上記の配列には単一の要素しかなく、サイズはその考慮に基づいて計算されることを考慮する必要があります。
同じことがjavaになります。ここでも配列は参照として渡されます。 "arrayname.length"プロパティは、それがどのように長さを計算するのですか?このように、
//Java code snippet...
int array[10];
System.out.println("Length of the array is "+array.length);
関数内であっても。 それを私に詳しく説明できますか?
*「あなたはそれを私に詳しく説明できますか?」 - 2つの完全に無関係の言語です。物語の終わり。 JVMが内部的にどのようにそれを処理するかを尋ねるならば、それはまったく別の話です(そしてSOには広すぎます) – UnholySheep
また、JavaとCのどちらも参照として配列を渡しません。 Cでは、値渡しのポインタに崩壊します。Java配列は参照型で、配列への参照を値渡ししています。 – UnholySheep
Javaの配列はPOD配列とは異なり、C++の 'std :: array'や' std :: vector'のようなオブジェクトです –