2012-02-23 53 views
16

Duplicar posible:
Tricky ternary operator in Java - autoboxingJava nula a int tema operador condicional

Sabemos que int roomCode = null; no está permitido por el compilador.

Entonces, ¿por qué el Código 1 no da un error de compilación, cuando lo hace el Código 2?

Código 1:

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

Código 2:

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

Una muy buena pregunta. –

+1

puede estar relacionado con el autoboxing, pero no veo cómo ... – talnicolas

+0

¿Qué evalúa el 'null' cuando toma ese camino? – Mysticial

Respuesta

11

Hice un poco de depuración, y se informó que, al evaluar

(childCount == 0) ? 100 : null; 

el programa llama al método valueOf de Entero para evaluar el null. Devuelve un Entero y como un Entero puede ser nulo (y no un int), se compila. Como si estuvieras haciendo algo como:

int roomCode = new Integer(null); 

Por lo tanto, está relacionado con el autoboxing.

+0

muy buena respuesta !!! – Deepak