Il problema è che la sua dichiarazione di stampa è valutato come:
System.out.println(("Result is: " + names) == null ? null : names.size());
Ciò è dovuto al fatto che +
has more precedence than ?:
operator Così, come la stringa - "risultato è nullo" non è uguale a null
, valutando names.size()
getta NPE.
Si noti che, quando null
viene utilizzato in concatenazione di stringhe, viene automaticamente convertito in "null"
. Pertanto, "Result is: " + null
non genererà NPE
. Questo è secondo JLS - String Conversion:
Se il riferimento è null
, viene convertito nella stringa "null"
(quattro caratteri ASCII n, u, l, l).
Per risolvere il problema, è necessario aggiungere le parentesi intorno alla vostra espressione condizionale per imporre una maggiore precendenza ad esso:
System.out.println("Result is: " + (names == null ? null : names.size()));
fonte
2013-09-05 05:22:36
Forse vuoi nomi == null? '0': names.size() – dcaswell