ここで、Javaに関連した簡単な質問があります。インスタンス変数としてint配列があるとしましょう:
int[] in = new int[5];
そのため、現在ではデフォルトで5つのゼロが含まれています。しかし、ローカル変数と同じ配列がある場合はどうでしょう。ゼロに初期化されますか?それは宿題ではありません、私はJava言語。
最初のこと理解することは、local variblesはデフォルト値で明示的に初期化されないstackに保存されることです。 インスタンス変数はヒープに保存され、デフォルトではデフォルト値で初期化されます。
また、objectsもHeapで作成されます。これは、インスタンス参照変数がその参照を保持しているか、ローカル参照変数を保持しているかに関係ありません。
さて、このような配列参照をローカル変数として宣言し、配列で初期化すると、次のようになります。-
int[] in = new int[5];
配列参照(in)
はstackに格納され、メモリは5 integerの要素を保持できる配列に割り当てられますheap(オブジェクトはヒープ)。次に、5つの連続したメモリ位置(size = 5)
、保存用整数値はヒープに割り当てられます。そして、配列オブジェクトの各indexは、それらのメモリ位置へのreferenceを順番に保持します。次に、配列参照はその配列を指します。したがって、5つの整数値のメモリはヒープに割り当てられるため、デフォルト値に初期化されます。
また、配列参照を宣言し、配列オブジェクトで初期化しないでください:-
int[] in;
配列参照はStack(ローカル変数であるため)で作成されますが、デフォルトでは配列に初期化されず、インスタンスの場合のようにnull
にも初期化されません変数。
したがって、配列の宣言と初期化の最初の方法を使用する場合、割り当ては次のようになります。-
"Your array reference"
"on stack"
| | "Array object on Heap"
+----+
| in |----------> ([0, 0, 0, 0, 0])
+----+
"Stack" "Heap"
行う場合も同じです:
int[] in = new int[5]
インスタンス変数またはローカル変数として。配列オブジェクトin
には、両方の場合にゼロが含まれます。
違いは、次のようなことをする場合です。
インスタンス変数 : int[] in
; (これはnullで初期化され、in
オブジェクトはヒープスペースに存在します。
ローカル変数:int[] in
; (ユーザーによって初期化される必要があります)stack
プリミティブ型の配列の場合、デフォルト値に初期化されます。 ドキュメント には次のように書かれています:
指定された長さの1次元配列が作成され、配列の各コンポーネントがデフォルト値に初期化されます
整数型のデフォルト値は0です。
はい、配列を初期化すると、コンテンツはそのタイプのデフォルト値に設定され、int
の場合は0、参照タイプの場合はnull
になります。
配列を初期化して内容を調べると、これを自分で確認できます。
...
final int[] in = new int[5];
for (int i = 0; i < in.length; i++) {
System.out.println(in[i]);
}
...
これは印刷されます:
0
0
0
0
0
はい
public void method() {
int[] in = new int[5];
System.out.pritnln(in[0]); //output in 0
}
この場合、配列はローカル変数です、必要なのは配列を初期化するだけです。配列を初期化すると、voila your array element ** s get their ** default values。
インスタンス変数またはローカル変数で宣言された配列がデフォルト値に初期化されるかどうかは実際には関係ありません。
各クラス変数、インスタンス変数、または配列コンポーネントは、作成時にデフォルト値で初期化されます。
An array initializer creates an array and provides initial values for all its components.
配列には、ローカル変数としてインスタンス化したときに5つのゼロが含まれていません。