Object[] args = new Object[0];
デバッグ中にコードベースでこのコードに出くわしました。
後で、次のような別のステートメントがあります。
args = new Object[10] ;
質問:
- 長さゼロの配列を初期化する必要があるのはなぜですか?
- なぜコードができないのか:
Object[] args
そして時が来たらargs = new Object[10]
. 長さゼロの配列を作成することに意味はありますか?
Object[] args = new Object[0];
デバッグ中にコードベースでこのコードに出くわしました。
後で、次のような別のステートメントがあります。
args = new Object[10] ;
質問:
Object[] args
そして時が来たらargs = new Object[10]
. 長さゼロの配列を作成することに意味はありますか?サイズ 0 の配列を作成するだけです。ほとんどの場合、どこかで NullPointerException を防ぐために行われます。次の割り当ては、前の配列を破棄し、サイズ 10 の新しいものを同じ変数に割り当てます。
これは、正規のオブジェクト配列の宣言と初期化です。最初の行args
は、0 要素の新しい配列で変数を初期化します。2 つ目は、変数を 10 要素の新しい配列で再初期化します。
それは空の配列の宣言です。for または単純な foreach ループに入る前に null 値をチェックしたくない場合に便利です。
これがどのように役立つかについての私のショットは次のとおりです。
次のように for ループを使用する場合:
for(Object arg:args){
// do something with arg
}
また、事前に初期化しないと、コンパイラは args が初期化されていない可能性があるというエラーを表示します。
ただし、args を null に初期化すると、null ポインター例外が発生します。
代わりにnew Object[0]
、args.length = 0、args が null でない場合、ループは当然 1 回も実行されません。
通常、このタイプのコーディングは、初期化中に配列の実際のサイズ (この場合は args) がわからない場合に行われます。配列のサイズは実行時に決定されます。そのため、初期化ではサイズが 0 に保たれます。後でプログラミングを行うときに、配列の実際のサイズを知ると、再初期化されます。
それは防御的なコーディングであり、おそらく不要です。同じ種類の考え方は、しばしばこれにつながるようです:
String line = "";
while ((line = in.readLine()) != null)
{
// ...
}
これは間違いなく不要です。
これにより、スロットがゼロの配列オブジェクトが作成されます。
Object[] args = new Object[0];
次に、args を 10 個のホルダーを持つ Object の配列に設定します。これらのホルダーは、何かを入れるまですべて空白になります。
args = new Object[10] ;
Object[]
Javaの「オブジェクトの配列」のオブジェクトです。配列は Java の特別なオブジェクトです。したがって、最初はインデックスに null 値を持つ別のオブジェクトに引数を割り当てています。
「長さゼロの配列を作成することに何か意味はありますか?」
new Object[0] はオブジェクトの空の配列です。
必要になる前に int をゼロに初期化するようなものです。初期値は 2 回目の代入で破棄されますargs = new Object[10] ;
空の配列を使用すると、高度な for ループを使用して配列を安全に反復処理できます。また、null をチェックする必要はありません。
Object[] array = new Object[0];
for(Object arg:array)
{
//It never enters here
}
したがって、次にこのループを割り当てるときに、それをObject[] array = new Object[10]
反復処理できます。