2017-01-24 7 views
3

は、私は、配列が似String配列にnull値をキャストすることによって初期化されていることに気づい:Javaでnullを超えてnullを使用する必要がありますか?いくつかのスニペットで

一般
String[] array = (String[])null; 

nullは、例えば、変数を初期化するために使用されます

String[] array = null; 

か、なぜ私は文字列配列またはこのような他のデータ型にnull値をキャストする必要があります?のような文字列の配列

+10

最初のいずれかを選択する理由はあり決してません。 – Kayaman

+0

最初は型キャストです。 –

+1

最初の場所で*コレクション型*を 'null'に設定しないでください!そうすることで、それ以外の場合には必要ない* nullチェック*を行うことが強制されます。 –

答えて

13

あなたがオーバーロードされたメソッド(同じ名前を持つ複数のメソッドのすなわち1)にnull値を渡すと、あなたはその方法をしたい場合(String[]) nullを使用する必要があります

String[] array = (String[]) null; 

を使用する必要はありませんコンパイラが選択する引数はString[]です。例えば

、あなたは以下のメソッドがある場合:コンパイラが選択するためにどの方法を知ることができませんので、

public void doSomething (Integer i) {} 
public void doSomething (String s) {} 
public void doSomething (String[] arr) {} 

doSomething (null)の呼び出しを、コンパイルを渡しません。

doSomething ((String[]) null)を呼び出すと、3番目の方法が実行されます。

もちろん

、あなたがString[]変数にnullを割り当て、キャストを避けることができます。

String[] arr = null; 
doSomething (arr); 
+0

そして、 'String'か' Integer'にキャストすると適切なキャストが呼び出されます。 –

+0

varargs 'public void doSomethingElse(String ... values) 'を持つ単一のメソッドがある場合も同じことが起こります - ' null'を渡すことがnullの値と最初の要素がnullの間で区別できない場合 –

関連する問題