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