Sự khác biệt là do hành vi của toán tử bậc ba trong Java.
Các ternary trường hợp có điều kiện:
Trong biểu late ? lateTime : time
, Java sẽ tự động Unbox chính xác một trong những đối số (theo giá trị của late
) để loại nguyên thủy tương ứng của nó. (Bạn có thể quan sát này bằng cách thiết lập time
để null
và late
để true
: a NullPointerException
là không ném cũng áp dụng khi thiết lastTime
để null
và late
-false
..)
Nếu giá trị của biểu thức sẽ time
, thì đây là số được mở rộng thành double
.
Trong cả hai trường hợp, kết quả là double
được tự động đóng hộp thành Double
khi gán nó cho result
.
Các trường hợp chuyển nhượng đơn giản:
Trong văn bản Double result = time;
, Java không cho phép điều này vì nó hy vọng bạn sẽ rõ ràng hơn.
Cá nhân tôi tìm ra cơ chế của các nhà điều hành có điều kiện ternary Java đối với các loại nguyên thủy đóng hộp với là một trong những phần nguy hại nhất của ngôn ngữ.
Kết quả kép = thời gian + 1.0; cũng sẽ biên dịch –
Bản sao có thể có của [Java autoboxing and madern operator operator] (http://stackoverflow.com/questions/25417438/java-autoboxing-and-ternary-operator-madness) – Tom