problem jest, że instrukcja print jest oceniany jako:
System.out.println(("Result is: " + names) == null ? null : names.size());
Wynika to z faktu, że +
has more precedence than ?:
operator Tak, jak struny - "Wynikiem jest null" nie jest równa null
, oceny names.size()
rzuca NPE.
Należy pamiętać, że w przypadku łączenia null
jest on automatycznie konwertowany na "null"
. Tak więc "Result is: " + null
nie będzie rzucać NPE
. Jest to zgodnie z JLS - String Conversion:
Jeśli odwołanie jest null
przekształcany jest do łańcucha "null"
(cztery znaków ASCII, n, u, l, l).
Aby rozwiązać ten problem, należy dodać nawiasów wokół wyrażenia warunkowego wymusić większą precendence do niego:
System.out.println("Result is: " + (names == null ? null : names.size()));
Może chcesz nazwy == null? '0': names.size() – dcaswell