significa que operadores numero matematicas incremento incrementar ejemplos disminuir decremento java compiler-errors precision

que - operadores de incremento y decremento en javascript



¿Por qué el operador de incremento de Java permite operaciones de estrechamiento sin conversión explícita? (3)

Posible duplicado:
Java + = operador

En Java, esto no es válido (no compila), como se esperaba:

long lng = 0xffffffffffffL; int i; i = 5 + lng; //"error: possible loss of magnitude"

Pero esto está perfectamente bien (?!)

long lng = 0xffffffffffffL; int i = 5; i += lng; //compiles just fine

Esto es obviamente una operación de estrechamiento, que posiblemente puede exceder el rango int . Entonces, ¿por qué el compilador no se queja?


El compilador no se queja porque, según JLS JLS :

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.

Así,

i += lng;

es equivalente a

i = (int)(i + lng);


Esto se define en el JLS :

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.

En otras palabras, i += lng realiza un lanzamiento implícitamente.


i += lng; Asignación de operador de asignación compuesta implícitamente.

i+=lng; is same as i = int(i+lng);

DESDE JLS :

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.