なぜ私は私の三項演算子でNullPointerExceptionが取得していますか?

Pramendra Raghuwanshi:

私の三項演算子を投げているNullPointerException私は、明示的に私のリストの値があるかどうかを確認かかわらさえをnull私は三項演算子の周りに括弧を追加する場合は、私のコードは動作します。

(例外をスロー)括弧なしコード:

final List<String> listData = null;
System.out.println("Insert new data (Created Monitorings) : " + 
        listData != null ? listData.size() : 0);

括弧(作業罰金)とのコード:

final List<String> listData = null;
System.out.println("Insert new data (Created Monitorings) : " + 
        (listData != null ? listData.size() : 0));

誰かがそれが働いているかを正確にそれを説明することができます。

GhostCat敬礼モニカC.:

これは、についてです順位の演算子の:文字列は、+三項演算子を次よりもはるかに高い優先順位を持ちます。

したがって、あなたの最初のスニペットは、実際にこれを行います。

( "Insert new data (Created Monitorings) : " + listData ) != null 
  ? listData.size() : 0

意味:あなたは(ヌル文字列をCONCAT listData)、およびヌルに対してそれを比較します。明らかにconcat'ed文字列がnullでないこと。したがって、あなたは、呼び出しを行いますlistData.size()そして、似ているとそのnull.size()ごNullPointerExceptionが発生につながります。

あなたは比較している間違ったヌルに対するものを!第二(括弧のを)スニペットでは三項演算の結果はあなたの文字列に追加されることを確認してください。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=183525&siteId=1