Vì vậy, có vẻ như bạn chỉ phải vào hộp nếu điều kiện là đúng và sẽ không có quyền nếu điều kiện là sai. Tuy nhiên, biểu thức toán tử bậc ba phải có loại tĩnh tĩnh cụ thể. Vì vậy, chúng tôi có Long
và long
. JLS nói rằng kết quả sẽ là nguyên thủy (chỉ là tốt - hãy tưởng tượng nếu người vận hành là, ví dụ: +
hoặc thậm chí ==
). Vì vậy, các nhà điều hành ternary sẽ buộc unboxing, và chỉ sau đó làm nhiệm vụ gây ra một boxing.
Nếu bạn đã thay thế mã bằng tương đương if-else
, sau đó bạn muốn chỉ có một bài tập từ long
để Long
và từ Long
để Long
, trong đó sẽ không có bất kỳ unboxing và vì vậy hãy chạy tốt.
IIRC, điều này được bao gồm là Bloch & Puzzlers Java của Gafter.
Nguồn
2011-12-15 03:04:15
Bạn thực hiện lệnh v = ((1 == 2)? Long.MAX_VALUE: (Long) null); điều này luôn luôn sai, vì vậy bạn luôn cố gắng bỏ null thành Long. Điều này có vẻ không được phép và ném ngoại lệ của bạn. – evildead
Tại sao bạn lại có một dòng mã như vậy? Trí tò mò trí tuệ hay là một đoạn trích từ mã sản xuất thực tế? – Paul
@Paul và evildead, trông giống như mã ví dụ để chứng minh thứ tự unboxing. – Steven