Você pode me explicar a saída deste 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);
A saída é 20 em ambos os casos
java
post-increment
pre-increment
Ankit Sachan
fonte
fonte
Respostas:
Isso ajuda?
O ponto principal é que
++a
incrementa o valor e o retorna imediatamente.a++
também incrementa o valor (no fundo), mas retorna o valor inalterado da variável - o que parece ser executado mais tarde.fonte
int a = 1; int b = a++; int c = ++b;
Esperava-se que b fosse 1, pois é um incremento posterior.++a
incrementos e então usa a variável.a++
usa e então incrementa a variável.Se você tem
e você faz
codaddict explica seu trecho específico.
fonte
Em ambos os casos, primeiro calcula o valor, mas no pós-incremento mantém o valor antigo e após o cálculo o retorna
++ a
a ++
fonte
é
Trabalhando : incremento de a a 6 (valor atual 6) + incremento de a a 7 (valor atual 7). A soma é 13, agora adicione-o ao valor atual de a (= 7) e, em seguida, aumente a para 8. A soma é 20 e o valor de a após a conclusão da atribuição é 8.
é
Funcionando : No valor inicial de a é 5. Use-o na adição e aumente-o para 6 (valor atual 6). Incremente a do valor atual 6 para 7 para obter outro operando de +. A soma é 12 e o valor atual de a é 7. Em seguida, incremente a de 7 para 8 (valor atual = 8) e adicione-o à soma anterior 12 para obter 20.
fonte
++a
incrementosa
antes de ser avaliado.a++
avaliaa
e então o incrementa.Relacionado à sua expressão dada:
Os parênteses que usei acima são usados implicitamente por Java. Se você olhar para os termos desta forma, você pode facilmente ver que eles são iguais e comutativos.
fonte
No exemplo acima
fonte
++ a é operador de incremento de prefixo:
a ++ é um operador de incremento postfix:
Depois de lembrar as regras, EZ para você calcular tudo!
fonte
Presumindo que você quis dizer
Isso avalia:
então i é 6 + 7 + 7 = 20 e então 20 é impresso.
então i é 5 + 7 + 8 = 20 e então 20 é impresso novamente.
e depois que todo o lado direito é avaliado (incluindo a definição de a para 8) ENTÃO a é definido para 6 + 7 + 7 = 20 e assim 20 é impresso uma última vez.
fonte
quando
a
é 5, entãoa++
dá 5 à expressão e incrementaa
depois, enquanto++a
incrementaa
antes de passar o número para a expressão (o que dáa
6 para a expressão neste caso).Então você calcula
fonte
Acredito, entretanto, que se você combinar todas as suas instruções e executá-las no Java 8.1, obterá uma resposta diferente, pelo menos é o que diz minha experiência.
O código funcionará assim:
fonte
Pré-incremento significa que a variável é incrementada ANTES de ser avaliada na expressão. Pós-incremento significa que a variável é incrementada DEPOIS de ter sido avaliada para uso na expressão.
Portanto, observe cuidadosamente e verá que todas as três atribuições são aritmeticamente equivalentes.
fonte
pré-incremento e pós-incremento são equivalentes se não em uma expressão
fonte
é
Funcionando: o pré / pós incremento tem associatividade da "direita para a esquerda", e o pré tem precedência sobre o pós, então antes de mais nada o pré-incremento será resolvido como
(++a + ++a) => 7 + 6
. entãoa=7
é fornecido para postar incremento =>7 + 6 + 7 =20
ea =8
.é
Trabalhando: pré / pós incremento tem "direita para a esquerda" Associatividade e pre tem precedência sobre post, então em primeiro lugar pré incremento será resolver como
(++a + ++a) => 7 + 6
.thena=7
é fornecido para incremento post =>7 + 7 + 6 =20
ea =8
.fonte
Eu acredito que você está executando todas essas instruções de forma diferente,
executando em conjunto resultará em => 38, 29
fonte