¿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.
¿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.
Respuestas:
¿Esto ayuda?
a = 5;
i=++a + ++a + a++; =>
i=6 + 7 + 7; (a=8)
a = 5;
i=a++ + ++a + ++a; =>
i=5 + 7 + 8; (a=8)
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.
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
a = 1;
y lo hace
System.out.println(a++); //You will see 1
//Now a is 2
System.out.println(++a); //You will see 3
codaddict explica su fragmento particular.
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 ++
i = ++a + ++a + a++;
es
i = 6 + 7 + 7
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.
i = a++ + ++a + ++a;
es
i = 5 + 7 + 8
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.
++a
incrementos a
antes de que se evalúe.
a++
lo evalúa a
y luego lo incrementa.
Relacionado con su expresión dada:
i = ((++a) + (++a) + (a++)) == ((6) + (7) + (7)); // a is 8 at the end
i = ((a++) + (++a) + (++a)) == ((5) + (7) + (8)); // a is 8 at the end
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.
++ 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!
Suponiendo que quisiste decir
int a=5; int i;
i=++a + ++a + a++;
System.out.println(i);
a=5;
i=a++ + ++a + ++a;
System.out.println(i);
a=5;
a=++a + ++a + a++;
System.out.println(a);
Esto se evalúa como:
i = (6, a is now 6) + (7, a is now 7) + (7, a is now 8)
entonces i es 6 + 7 + 7 = 20 y así se imprime 20.
i = (5, a is now 6) + (7, a is now 7) + (8, a is now 8)
entonces i es 5 + 7 + 8 = 20 y entonces 20 se imprime nuevamente.
a = (6, a is now 6) + (7, a is now 7) + (7, a is now 8)
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.
cuando a
es 5, le a++
da un 5 a la expresión y a
luego se incrementa , mientras que se ++a
incrementa a
antes de pasar el número a la expresión (que da a
6 a la expresión en este caso).
Entonces tu calculas
i = 6 + 7 + 7
i = 5 + 7 + 8
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í:
int a=5,i;
i=++a + ++a + a++; /*a = 5;
i=++a + ++a + a++; =>
i=6 + 7 + 7; (a=8); i=20;*/
i=a++ + ++a + ++a; /*a = 5;
i=a++ + ++a + ++a; =>
i=8 + 10 + 11; (a=11); i=29;*/
a=++a + ++a + a++; /*a=5;
a=++a + ++a + a++; =>
a=12 + 13 + 13; a=38;*/
System.out.println(a); //output: 38
System.out.println(i); //output: 29
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.
a=5; i=++a + ++a + a++;
es
i = 7 + 6 + 7
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
. luego a=7
se proporciona para publicar incremento => 7 + 6 + 7 =20
y a =8
.
a=5; i=a++ + ++a + ++a;
es
i=7 + 7 + 6
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
y a =8
.
Creo que está ejecutando todas estas declaraciones de manera diferente si se
ejecutan juntas dará como resultado => 38, 29
int a=5,i;
i=++a + ++a + a++;
//this means i= 6+7+7=20 and when this result is stored in i,
//then last *a* will be incremented <br>
i=a++ + ++a + ++a;
//this means i= 5+7+8=20 (this could be complicated,
//but its working like this),<br>
a=++a + ++a + a++;
//as a is 6+7+7=20 (this is incremented like this)