una ternario ternaria sola operador multiple linea estructura elvis condicional java conditional-operator

ternaria - operador ternario java



Tipo incorrecto en la asignaciĆ³n condicional de Java (2)

En el siguiente código tengo dos operaciones de asignación condicional idénticas, una devuelve un objeto de tipo Double y la segunda devuelve el String "Integer".

double d = 24.0; Number o = (d % 1 == 0) ? new Double(d).intValue() : new Double(d).doubleValue(); String result = (d % 1 == 0) ? "Integer" : "Double"; System.out.println(o.getClass()); // prints "class java.lang.Double" System.out.println(result); // Integer

¿Por qué las mismas expresiones exactas devuelven dos cosas diferentes?



Bueno, eso se debe a las docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.25 :

De lo contrario, si los operandos segundo y tercero tienen tipos que son convertibles (§5.1.8) a tipos numéricos, entonces hay varios casos:

  • ...
  • De lo contrario, la promoción numérica binaria ( §5.6.2 ) se aplica a los tipos de operandos, y el tipo de expresión condicional es el tipo promovido de los operandos segundo y tercero.

La promoción numérica se define aquí en §5.6.2 . Dice:

La conversión de la primitiva de ampliación (§5.1.2) se aplica para convertir uno o ambos operandos según lo especificado por las siguientes reglas:

  • Si cualquiera de los operandos es de tipo doble, el otro se convierte en doble.
  • ...