4
votes

Pourquoi j'obtiens NullPointerException dans mon opérateur ternaire?

Mon opérateur ternaire lance une NullPointerException même si je vérifie explicitement si la valeur de ma liste est null . Cependant, si j'ajoute des parenthèses autour de l'opérateur ternaire, mon code fonctionne.

Code sans parenthèses (levant l'exception):

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

Code entre parenthèses (fonctionne bien):

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

Quelqu'un peut-il expliquer comment cela fonctionne exactement?


2 commentaires

NullPointerException n'est pas une erreur de compilation


@GhostCat Oui !!! Je vous remercie :)


3 Réponses :


1
votes

dans l'extrait 1, la valeur comparée à null est "Insert new data (Created Monitorings):" + listData


0 commentaires

8
votes

Il s'agit de priorité des opérateurs: la chaîne + a une priorité beaucoup plus élevée que l'opérateur ternaire suivant.

Par conséquent, votre premier extrait de code fait en fait ceci:

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

Signification: vous concatez une chaîne ( avec un listData nul), et comparez-le à null. Evidemment, cette chaîne concatée n'est pas nulle. Ainsi, vous appelez listData.size () . Et cela ressemble à null.size () qui mène à votre NullPointerException.

Vous comparez la mauvaise chose à null! Dans le deuxième extrait de code, les (parenthèses) garantissent que le résultat de l'opération ternaire est ajouté à votre chaîne.


0 commentaires

0
votes

'+' a plus de priorité que '! ='

Par conséquent, l'extrait de code 1 se traduit par:

( ("Insérer de nouvelles données (Moniteurs créés):" + listData) ! = null? listData.size (): 0;

L'expression n'est pas nulle donc elle passe à listData.size (). Mais comme il est nul, il lève l'exception.


0 commentaires