java - responsebody - La diferencia entre+= y=+
minecraft wiki mobs (8)
He perdido + = con = + una a muchas veces, y creo que sigo olvidando porque no sé la diferencia entre estas dos, solo que una me da el valor que espero y la otra no.
¿Por qué es esto?
Algunas perspectivas históricas: Java heredó el +=
y operadores similares de C. En versiones muy tempranas de C (mediados de los años 70), los operadores de asignación compuesta tenían el "=" a la izquierda, por lo que
x =- 3;
era equivalente a
x = x - 3;
(excepto que x
solo se evalúa una vez).
Esto causó confusión, porque
x=-1;
disminuiría x en lugar de asignarle el valor -1, por lo que se cambió la sintaxis (evitando el horror de tener que rodear a los operadores con espacios en blanco: x = -1;
).
(Utilicé -=
y =-
en los ejemplos porque Early C no tenía el operador unario +
).
Afortunadamente, Java se inventó mucho después de que C cambiara a la sintaxis actual, por lo que nunca tuvo este problema en particular.
Es simple. X + = 1 es x = x + 1 mientras que x = + 1 hará que x tenga el valor de uno (positivo)
Porque =+
no es un operador de Java.
+=
-> Añadir el lado derecho a la izquierda
=+
-> No uses esto. Establecer el lado izquierdo a la derecha.
+=
es un operador de asignación compuesto: agrega el operando RHS al valor existente del operando LHS.
=+
es solo el operador de asignación seguido por el operador unario +. Establece el valor del operando LHS al valor del operando RHS:
int x = 10;
x += 10; // x = x + 10; i.e. x = 20
x =+ 5; // Equivalent to x = +5, so x = 5.
a += b
es igual a = a + b
. a =+ b
es igual a = (+b)
.
a += b
es una mano corta para a = a + b
(aunque tenga en cuenta que la expresión a
solo se evaluará una vez).
a =+ b
es a = (+b)
, es decir, asignando el unario +
de b
a a
.
Ejemplos:
int a = 15;
int b = -5;
a += b; // a is now 10
a =+ b; // a is now -5
x += y
es lo mismo que
x = x + y
y
x =+ y
está mal pero podría ser interpretado como
x = 0 + y