Evaluación ternaria de Java (inmediata si)

No puedo encontrar la parte relevante de la especificación para responder esto. En una statement de operador condicional en Java, ¿se evalúan los argumentos verdadero y falso?

Entonces, ¿podrían los siguientes arrojar una NullPointerException?

Integer test = null; test != null ? test.intValue() : 0; 

Como quería la especificación, aquí está (del §15.25 Operador condicional?: La última frase de la sección):

La expresión de operando no elegida no se evalúa para esa evaluación particular de la expresión condicional.

No, no pudo. Eso es lo mismo que:

 Integer test = null; if ( test != null ) { test = test.intValue(); } else { test = 0; } 

Sé que es una publicación anterior, pero mira un caso muy similar y luego vótame: P

Respuesta a la pregunta original: solo se evalúa un operando PERO:

 @Test public void test() { Integer A = null; Integer B = null; Integer chosenInteger = A != null ? A.intValue() : B; } 

Esta prueba arrojará NullPointerException siempre y en este caso IF statemat no es equivalente a?: Operador.

El motivo está aquí http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.25 . La parte sobre el boxeo / unboxing está envuelta, pero se puede entender fácilmente mirando:

“Si uno de los operandos segundo y tercero es de tipo boolean y el tipo del otro es de tipo Boolean , entonces el tipo de expresión condicional es boolean “.

Lo mismo se aplica a Integer.intValue()

¡Atentamente!

la syntax es incorrecta

Prueba de entero = (prueba! = Nulo)? test.intValue (): 0;

Espero eso ayude ….

Intereting Posts