だから私はint配列を宣言して初期化しています:
static final int UN = 0;
int[] arr = new int[size];
for (int i = 0; i < size; i++) {
arr[i] = UN;
}
代わりにこれを行うと言います...
int[] arr = new int[5];
System.out.println(arr[0]);
... 0
は標準出力に出力されます。また、これを行う場合:
static final int UN = 0;
int[] arr = new int[5];
System.out.println(arr[0]==UN);
... true
は標準出力に出力されます。では、Javaはデフォルトで配列をどのように初期化していますか?デフォルトの初期化が配列インデックスを0
に設定していると想定しても安全ですか?これは、配列をループして初期化する必要がないことを意味しますか?
ありがとう。
Java言語仕様 から:
各クラス変数、インスタンス変数、または配列コンポーネントは、作成時にデフォルト値で初期化されます(§15.9、§15.10):
- バイト型の場合、デフォルト値はゼロ、つまり
(byte)0
の値です。- Short型の場合、デフォルト値はゼロ、つまり
(short)0
の値です。- タイプintの場合、デフォルト値はゼロ、つまり
0
です。- Long型の場合、デフォルト値はゼロ、つまり
0L
です。- タイプfloatの場合、デフォルト値は正のゼロ、つまり
0.0f
です。- Double型の場合、デフォルト値は正のゼロ、つまり
0.0d
です。- タイプcharの場合、デフォルト値はヌル文字、つまり
'\u0000'
です。- ブール型の場合、デフォルト値は
false
です。- すべての参照タイプ(§4.3)の場合、デフォルト値は
null
です。
ThorbjørnRavn Andersenは、ほとんどのデータ型について回答しました。アレイについて激しい議論があったため、
Jls仕様から引用 http://docs.Oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.5 "配列コンポーネントは、作成時のデフォルト値」
配列がローカルであるか、インスタンスまたはクラス変数であるかに関係なく、デフォルト値で
Javaは、初期化時のJava配列のデフォルトの長さは10になると言っています。
private static final int DEFAULT_CAPACITY = 10;
ただし、size()
メソッドは、配列に挿入された要素の数を返します。初期化の時点で、配列に要素を挿入していない場合、ゼロを返します。
private int size;
public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
public void add(int index, E element) {
rangeCheckForAdd(index);
ensureCapacityInternal(size + 1); // Increments modCount!!
System.arraycopy(elementData, index, elementData, index + 1,size - index);
elementData[index] = element;
size++;
}
Javaによると、
データ型-デフォルト値
バイト-0
ショート-0
int-0
長い-0L
フロート-0.0f
ダブル-0.0d
char-'\ u0000'
文字列(または任意のオブジェクト)-null
ブール-false
Javaのすべてのクラスにはコンストラクターがあります(コンストラクターは、新しいオブジェクトが作成されたときに呼び出され、クラス変数のフィールドを初期化するメソッドです)。したがって、クラスのインスタンスを作成すると、オブジェクトの作成中にコンストラクターメソッドが呼び出され、その時点ですべてのデータ値が初期化されます。
整数配列タイプのオブジェクトの場合、配列内のすべての値はコンストラクターメソッドで0(zero)に初期化されます。同様に、ブール配列のオブジェクトの場合、すべての値はfalseに初期化されます。
したがって、Javaは、オブジェクトの作成中にコンストラクターメソッドを実行して配列を初期化しています