jdk descargar actualizar java

descargar - ¿Por qué Java realiza una conversión de tipo implícita de doble a entero cuando se usa el operador "más es igual a"?



java offline (2)

Según la java.sun.com/docs/books/jls/third_edition/html/… :

Una expresión de asignación compuesta de la forma E1 op = E2 es equivalente a E1 = (T) ((E1) op (E2)), donde T es el tipo de E1, excepto que E1 se evalúa solo una vez. Por ejemplo, el siguiente código es correcto:

short x = 3; x += 4.6;

y da como resultado que x tenga el valor 7 porque es equivalente a:

short x = 3; x = (short)(x + 4.6);

Posible duplicado:
Comportamiento variable por posible pérdida de precisión.

Ejemplo de código A

public class Test { public static void main(String[] args) { int i = 0; i = i + 1.5; } }

Ejemplo de código B

public class Test { public static void main(String[] args) { int i = 0; i += 1.5; } }

Como era de esperar, la compilación A produce el error siguiente. Sorprendentemente , la compilación de B no produce ningún error y parece que se comporta como si insertara una conversión explícita a entero antes del valor doble 1.5. ¿Por qué en el mundo sucede esto? ¡Esto va en contra de todo lo que creía saber!

Test.java:6: possible loss of precision found : double required: int i = i + 1.5; ^ 1 error