私は非常に複数の面で混乱しています。缶誰かがこの上にいくつかの光を当てます。ここではサンプルコードです。
public static void main(String[] args) {
String str = null;
abc(str);
}
static void abc(String... str){
System.out.println(str.length);
}
OUTPUT:1
のは、それを打破してみましょう。私はそれをより明確にするために、パラメータ名の名前を変更しました。
static void abc(String... arrayOfStrings){
System.out.println(arrayOfStrings.length);
}
String ...
代わりに配列を渡すので、あなたが引数としての項目を1つずつ渡し、彼らはあなたのためのアレイに統合されますの下にできると言っています。あなたはまだタイプを明示的にオブジェクトを渡すことができますString[]
(その場合、それはあなたのための配列を作成しません)が、渡すだけでnull
、それが型であると仮定しません。String
String[]
あなたはやっているabc(null)
(あなたが渡している引数があるのでnull
)。
そうarrayOfStrings
であることを起こる一つの項目、がありますnull
参照を。
だから、arrayOfStrings.length
戻って1
。
あなたがした場合abc(null, null)
、あなたはなるだろう2
。
あなたがした場合abc((String[]) null)
、あなたはなるだろうNullPointerException
あなたが取得しようとすることになるためlength
のnull
オブジェクト参照を。あなたはNULLを渡すことが予想される場合は、確認してくださいabc()
のためのチェックをnull
引数として渡された配列にアクセスする前に。
渡す一般的なベストプラクティスを避けるようnull
、可能な限り、空の配列を渡すことをお勧めします。渡すnull
かどうかを確認することを忘れするためにいくつかの方法を待って、ちょうどポイズンピルあるnull
と投げますNullPointerException
。