2011-09-17 30 views
18

puede usted por favor me ayude a entender lo que significa el siguiente código:¿Qué hace el operador "+ =" en Java?

x += 0.1; 
+2

Parece que la adición de 0,1 a una variable llamada x .. – Friek

+1

Casi un duplicado de http://stackoverflow.com/questions/608721/what-is-the-difference-between-double-aa-int-b -and-int-a-double-b – rds

Respuesta

71

El "conocimiento común" de la programación es que x += y es una notación abreviada equivalente de x = x + y. Siempre que x y y sean del mismo tipo (por ejemplo, ambos son int s), puede considerar las dos declaraciones equivalentes.

Sin embargo, en Java, x += y no es idéntica a x = x + y en general.

Si x y y son de tipos diferentes, el comportamiento de las dos afirmaciones difiere debido a las reglas del lenguaje. Por ejemplo, vamos a tener x == 0 (int) y y == 1.1 (doble):

int x = 0; 
    x += 1.1; // just fine; hidden cast, x == 1 after assignment 
    x = x + 1.1; // won't compile! 'cannot convert from double to int' 

+= realiza una conversión implícita, mientras que para +, es necesario especificar explícitamente el segundo operando, de lo contrario se obtendría un error de compilación.

Presupuesto de Java Puzzlers de Joshua Bloch: fundido

(...) expresiones de asignación compuestos automáticamente el resultado de el cálculo que realizan al tipo de la variable de su lado izquierdo . Si el tipo de resultado es idéntico al tipo de , la variable no tiene efecto. Sin embargo, si el tipo del resultado es más ancho que el de la variable, el operador de asignación compuesto realiza una primitiva de estrechamiento silencioso conversión [JLS 5.1.3].

+0

+1, debe realizar el reparto ANTES de la asignación. –

+1

Además, si 'x' es una expresión más complicada (como la matriz o el acceso de campo) en lugar de una sola variable, sus expresiones de componentes ahora solo se evalúan una vez en lugar de dos. –

+4

Todos mis profesores han mentido: O –

2

devtop += Math.pow(x[i] - mean, 2); añadirá el resultado de la operación Math.pow(x[i] - mean, 2) a la variable devtop.

Un ejemplo más sencillo:

int devtop = 2; 
devtop += 3; // devtop now equals 5 
1

devtop += Math.pow(x[i] - mean, 2);Math.pow(x[i] - mean, 2) añade a devtop.

11

Es uno de los assignment operators. Toma el valor de x, le agrega 0.1 y luego almacena el resultado de (x + 0.1) nuevamente en x.

Así:

double x = 1.3; 
x += 0.1; // sets 'x' to 1.4 

Se es funcionalmente idéntica a, pero más corta que:

double x = 1.3; 
x = x + 0.1; 

NOTA: Al hacer matemáticas de punto flotante, las cosas don't always work the way you think they will.

10
  • x += y es x = x + y
  • x -= y es x = x - y
  • x *= y es x = x * y
  • x /= y es x = x/y
  • x %= y es x = x % y
  • x ^= y es x = x^y
  • x &= y es x = x & y
  • x |= y es x = x | y

y así sucesivamente ...

+0

¿qué tal = +? compila pero no hace nada – kommradHomer

+0

@kommradHomer 'x = + y' es equivalente a' x = y'. –

+1

@kommradHomer 'x = + y' es' x = 0 + y' –