Vấn đề là bản in của bạn được đánh giá là:
System.out.println(("Result is: " + names) == null ? null : names.size());
Điều này là do thực tế là +
has more precedence than ?:
operator Vì vậy, như chuỗi - "Kết quả là null" không bằng null
, đánh giá names.size()
ném NPE.
Lưu ý rằng, khi null
được sử dụng trong chuỗi nối, nó sẽ tự động được chuyển đổi thành "null"
. Vì vậy, "Result is: " + null
sẽ không ném NPE
. Đây là theo JLS - String Conversion:
Nếu tham chiếu là null
, nó được chuyển thành chuỗi "null"
(bốn ký tự ASCII n, u, l, l).
Để khắc phục vấn đề này, bạn nên thêm ngoặc xung quanh biểu thức điều kiện của bạn để thực thi precendence hơn với nó:
System.out.println("Result is: " + (names == null ? null : names.size()));
Nguồn
2013-09-05 05:22:36
Có thể bạn muốn đặt tên == null? '0': names.size() – dcaswell