16

理由はありますか

int[] myArray = new int[0];

コンパイルしますか?

このような表現を使用することはありますか?

myArray[0] = 1;

を与えjava.lang.ArrayIndexOutOfBoundsExceptionます。

if (myArray == null) {
    System.out.println("myArray is null.");
} else {
    System.out.println("myArray is not null.");
}

を与えmyArray is not null.ます。

int[] myArray = new int[0]したがって、よりも優先される理由がわかりませんmyArray = null;

4

7 に答える 7

32

nullチェックを減らすためだけです。

空の配列を反復処理することはできますが、nullを反復処理することはできません。

コードを考えてみましょう:

for (Integer i: myArray) {
   System.out.println(i);
}

空の配列では何も出力せず、nullでは。を引き起こしNullPointerExceptionます。

于 2012-11-18T20:54:13.550 に答える
22

なぜだめですか?

.exeディレクトリ内のファイルのリストを含む配列を取得できます。.exeまた、そのディレクトリにはファイルを含めることはできません。

この場合に強制的に使用nullすると、配列の作成と処理の両方のロジックが複雑になり、何の役にも立ちません。

更新: さらに重要なことに、Java の配列サイズはコンパイル時に決定されます。new int[0]コンパイル時に検出できるのは事実ですが、検出new int[System.currentTimeMillis % 10]できません。したがって、コンパイル時に 0 ケースをチェックしても、空の配列が得られないという保証はありません。

于 2012-11-18T20:51:45.523 に答える
12

例えば:

public void getArraySum(int[] array) {
    int sum = 0;    

    for (int i = 0; i < array.length; i++)
        sum += array[i];

    return sum;
}

これは空の配列では機能しますが、null参照では機能しません。

冗長nullチェックを保存するだけです。そのため、たとえば空のリストも作成できます。

于 2012-11-18T20:51:42.883 に答える
6

はい、たとえば、コマンド ライン パラメータを使用しないメイン メソッドの実行があります。null ではなく、サイズが 0 の配列が返されます。

于 2012-11-18T20:50:59.703 に答える
5
 int[] myArray = new int[0];

Java の配列は通常のオブジェクトです。したがって、上記のコードは、配列サイズがゼロであることを示しています。これは、 Null ポインター例外に対する保護に特に役立ちます。

これと同様に、コレクション API にも空のプレースホルダーに初期化する方法があります。

 List<String> list = Collections.EMPTY_LIST;
于 2012-12-02T07:49:32.970 に答える
4
public int[] getData()
{
    if (iGotNothinForYa)
    {
        return new int[0];
    }

    int[] data = buildUpArray();
    return data;
}

多くの場合、このようなメソッドによって返されるデータを使用するコードでは、null チェックを行う必要がない方が簡単です。特に配列を反復処理する場合。

int[] data = getData();
for (int i : data) // yay! no null check!
{
    doSomethingWith(i);
}
于 2012-11-18T20:51:23.000 に答える