¿Puede explicarme la salida de este código Java?
int a=5,i;
i=++a + ++a + a++;
i=a++ + ++a + ++a;
a=++a + ++a + a++;
System.out.println(a);
System.out.println(i);
La salida es 20 en ambos casos.
java
post-increment
pre-increment
Ankit Sachan
fuente
fuente
Respuestas:
¿Esto ayuda?
El punto principal es que
++a
incrementa el valor y lo devuelve inmediatamente.a++
también incrementa el valor (en segundo plano) pero devuelve el valor sin cambios de la variable, lo que parece que se ejecuta más tarde.fuente
int a = 1; int b = a++; int c = ++b;
Esperaba que b fuera 1 ya que es un incremento posterior.++a
incrementa y luego usa la variable.a++
usa y luego incrementa la variable.Si usted tiene
y lo hace
codaddict explica su fragmento particular.
fuente
En ambos casos, primero calcula el valor, pero en el incremento posterior mantiene el valor anterior y después del cálculo lo devuelve.
++ a
a ++
fuente
es
En funcionamiento : incremento a 6 (valor actual 6) + incremento a 7 (valor actual 7). La suma es 13 ahora agréguelo al valor actual de a (= 7) y luego incremente a 8. La suma es 20 y el valor de a después de que se completa la asignación es 8.
es
De trabajo : En el valor inicial es de un 5. Uso en la adición y luego se incrementa a 6 (valor actual 6). Incremente a del valor actual 6 a 7 para obtener otro operando de +. La suma es 12 y el valor actual de a es 7. A continuación, incremente a de 7 a 8 (valor actual = 8) y súmelo a la suma anterior 12 para obtener 20.
fuente
++a
incrementosa
antes de que se evalúe.a++
lo evalúaa
y luego lo incrementa.Relacionado con su expresión dada:
Los parenteses que utilicé anteriormente son utilizados implícitamente por Java. Si observa los términos de esta manera, puede ver fácilmente que ambos son iguales ya que son conmutativos.
fuente
En el ejemplo anterior
fuente
++ a es el operador de incremento de prefijo:
a ++ es un operador de incremento postfijo:
Una vez que recuerde las reglas, ¡EZ para que calcule todo!
fuente
Suponiendo que quisiste decir
Esto se evalúa como:
entonces i es 6 + 7 + 7 = 20 y así se imprime 20.
entonces i es 5 + 7 + 8 = 20 y entonces 20 se imprime nuevamente.
y después de evaluar todo el lado derecho (incluida la configuración de a en 8) ENTONCES a se establece en 6 + 7 + 7 = 20 y, por lo tanto, 20 se imprime por última vez.
fuente
cuando
a
es 5, lea++
da un 5 a la expresión ya
luego se incrementa , mientras que se++a
incrementaa
antes de pasar el número a la expresión (que daa
6 a la expresión en este caso).Entonces tu calculas
fuente
Sin embargo, creo que si combina todas sus declaraciones y lo ejecuta en Java 8.1, obtendrá una respuesta diferente, al menos eso es lo que dice mi experiencia.
El código funcionará así:
fuente
Pre-incremento significa que la variable se incrementa ANTES de que se evalúe en la expresión. Post-incremento significa que la variable se incrementa DESPUÉS de que se haya evaluado para su uso en la expresión.
Por lo tanto, mire con atención y verá que las tres asignaciones son aritméticamente equivalentes.
fuente
preincremento y postincremento son equivalentes si no están en una expresión
fuente
es
En funcionamiento: el incremento pre / post tiene asociatividad "de derecha a izquierda", y pre tiene precedencia sobre el post, por lo que en primer lugar el incremento pre se resolverá como
(++a + ++a) => 7 + 6
. luegoa=7
se proporciona para publicar incremento =>7 + 6 + 7 =20
ya =8
.es
En funcionamiento: el incremento pre / post tiene asociatividad "de derecha a izquierda", y pre tiene precedencia sobre el post, por lo que, en primer lugar, el incremento previo se resolverá ya que, a
(++a + ++a) => 7 + 6
continuación,a=7
se proporciona post incremento =>7 + 7 + 6 =20
ya =8
.fuente
Creo que está ejecutando todas estas declaraciones de manera diferente si se
ejecutan juntas dará como resultado => 38, 29
fuente