Das Problem ist, dass Ihre Print-Anweisung wird ausgewertet als:
System.out.println(("Result is: " + names) == null ? null : names.size());
Dies ist aufgrund der Tatsache, dass +
has more precedence than ?:
operator So, wie der String - "Ergebnis null ist" nicht gleich null
, Bewertung names.size()
NPE wirft.
Beachten Sie, dass wenn null
in Zeichenfolge-Verkettung verwendet wird, wird es automatisch in "null"
konvertiert. Also, "Result is: " + null
wird nicht NPE
werfen. Dies ist gemäß JLS - String Conversion:
Wenn die Referenz null
ist, um es in die Zeichenfolge konvertiert wird "null"
(vier ASCII-Zeichen n, u, l, l).
Um das Problem zu beheben, Sie Klammern um Ihren bedingten Ausdruck hinzufügen sollten größer precendence, um es zu erzwingen:
System.out.println("Result is: " + (names == null ? null : names.size()));
Vielleicht möchten Sie Namen == null? '0': names.size() – dcaswell