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?
Esto se define en el JLS :
Una expresión de asignación compuesta de la forma
E1 op= E2
es equivalente aE1 = (T) ((E1) op (E2))
, dondeT
es el tipo deE1
, excepto queE1
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.