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 0.0 sigue siendo == a 0
System.out.println(0 == 0.0); // equals true
docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.25
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.
- ...