2012-02-23 11 views
16

Powiel możliwe:
Tricky ternary operator in Java - autoboxingzerowy Java do int operator warunkowy WYDANIE

Wiemy, że int roomCode = null; nie jest dozwolone przez kompilator.

To dlaczego kod 1 nie daje błędu kompilatora, gdy działa kod 2.

Kod 1:

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

Kod 2:

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

Bardzo dobre pytanie. –

+1

może być związane z autoboxing, ale nie widzę, jak ... – talnicolas

+0

Co "null" ocenić, kiedy bierze tę ścieżkę? – Mysticial

Odpowiedz

11

Zrobiłem trochę debugowanie i okazało się, że przy ocenie

(childCount == 0) ? 100 : null; 

Program wywołuje metodę valueOf z Integer do oceny null. Zwraca liczbę całkowitą, a jako liczbę całkowitą może być null (a nie int), kompiluje. Tak jakbyś robił coś takiego:

int roomCode = new Integer(null); 

Jest to związane z autoboxingiem.

+0

bardzo dobra odpowiedź !!! – Deepak

Powiązane problemy