2012-02-23 31 views
16

thể trùng lặp:
Tricky ternary operator in Java - autoboxingJava null để int vấn đề Conditional Operator

Chúng ta biết rằng int roomCode = null; không được phép bởi trình biên dịch.

Sau đó, tại sao Mã 1 không đưa ra lỗi trình biên dịch, khi Mã 2 thực hiện.

Mã 1:

int roomCode = (childCount == 0) ? 100 : null; 

Mã 2:

int roomCode = 0; 
if(childCount == 0) roomCode = 100; 
else roomCode = null; // Type mismatch: cannot convert from null to int 
+1

Một câu hỏi rất hay. –

+1

có thể liên quan đến autoboxing nhưng tôi không thấy làm thế nào ... – talnicolas

+0

'null' đánh giá khi nào nó có đường dẫn đó? – Mysticial

Trả lời

11

tôi đã làm một chút gỡ lỗi và phát hiện ra rằng khi đánh giá

(childCount == 0) ? 100 : null; 

chương trình gọi phương thức valueOf của Integer để đánh giá null. Nó trả về một số nguyên và là một số nguyên có thể là null (và không phải là một int), nó biên dịch. Như thể bạn đang làm điều gì đó như:

int roomCode = new Integer(null); 

Vì vậy, nó liên quan đến autoboxing.

+0

câu trả lời rất hay !!! – Deepak

Các vấn đề liên quan