Isto ocorre porque a ordem de uma avaliação associativa é da direita para esquerda, e a ordem de uma avaliação de expressao é feito da esquerda para direita.
Lembrando também que em uma expressão os operadores (++,–) são feitos antes do operadores binarios (+,-,*,/,%,etc…).
Então,
a = a++; (avaliação associativa, resultado a = 1)
b = b++ + b; (avalia a expressão, sendo primeiro feito o incremento, depois a soma e então associa a b, resultado b = 3,)
Caso queira saber mais, procure pelo assunto Operadore Unarios, Binarios e Ordem de Avalição dos operandos em JAVA.
[quote=“maxguzenski”]dai seria 2 - 4
mas eu continuo sem entender… :([/quote]
a = ++a;
b = ++b + b;
System.out.println(a+" - "+b);
Nesse caso acima, no primeiro statement, ‘a’ assume valor 2. No segundo statement ++b por ser unary e prefixado, possue maior precedência que o operador +, assim é executado primeiro (é incrementado em 1). Dessa forma, b passa a ser 2. Só aí, b é somado a ele mesmo, resultando em 4.
No último statetement, como o operador - está entre aspas, é considerado uma String assim, println concatena toda a expressão como sendo uma String, resultando em “2 - 4”, que é então imprimido.
O interpretador Java segue uma ordem na execução de operadores…
a++ é diferente de ++a;
e durante a avaliação da expressão… ++a (pré-incremento) é executado antes de qualquer associação e a++ (pós-incremento) é executado depois de todas as associações…
[quote=hivaj]Isto ocorre porque a ordem de uma avaliação associativa é
b = b++ + b; (avalia a expressão, sendo primeiro feito o incremento, depois a soma e então associa a b, resultado b = 3,)
Caso queira saber mais, procure pelo assunto Operadore Unarios, Binarios e Ordem de Avalição dos operandos em JAVA.
Qualquer duvida é só postar…[/quote]
mas se neste caso e expressao foi avaliada dando preferencia para os operadores unários como vc acima explica,entao para b=1;
se eu tiver b=b++ + b++ deveria como vc explicou dar preferencia para os operados unários e neste caso após a preferencia passar para os operadores binarios entao o resultado seria 4,fazendo b=(2+2) ok??,mas isso nao acontece resultado =3
pq??Acredito que tenha a ver com arvores para espressoes matematicas
o código abaixo é executado na seguinte sequencia:
b = b++ + b // código original
b = 1 + b // substituição do primeiro ‘b’ pelo seu valor (1), e é feito o incremento (b passa a valer 2)
b = 1 + 2 // substituição do segundo ‘b’ pelo seu valor (2).
b = 3 // b recebe o valor da soma (3)
Conforme você citou, como ficaria se fosse assim:
b = b++ + b++ // seu código
b = 1 + b // substituição do primeiro ‘b’ pelo seu valor (1), e é feito o incremento (b passa a valer 2)
b = 1 + 2 // substituição do segundo ‘b’ pelo seu valor (2), e é feito o incremento (b passa a valer 3)
b = 3 // apesar de ‘b’ já possuir o valor de 3, ele recebe o resultado da soma (3)
[quote=LPJava]bom para mim o resultado ai seria 2 - 3 se tivesse essa opção ia marcar ela veja a explicao no codigo abaixo de maneira informal.
a = a++;
b = b++ + b;
System.out.println(a+" - "+b);
//entao vc tem:
a = 1
agora [b]a [/b]vale 2.
b = 1 +(aqui B vale 2 devido ao pos-incremento) 2; resulta 1+2 = 3.
System.out.println(2+" - "+3);
flw![/quote]
Camilo,
Creio eu que esteja errado …
a impressão seria: 1 - 3
Pois o código a = a++ anula o incremento quando não tem mais nenhuma operação como b = b++ + b;
É punk … mais uma pra ficarmos ligados na certificação …
Pensei que certificação seria como Nescau ou Toddy …
O próprio ‘a’ já está sendo incrementado, então por que a ele mesmo atribuí-lo? (minha explicação, não tenho explicação técnica)
O interessante é que, se você colocar apenas a++, a impressão será 2.
Se continuar duvidando, faça o teste.
Eu até agora e “sempre” continuarei a duvidar … risos …
Engraçado. Não?
Esse exemplo não tem no livro da Kathy, mas se encontra no livro do Roberto Rubinstein …
Tá aí … algo que o livro não trouxe (pelo menos eu não vi no capítulo sobre atribuições)… :evil: :evil:
Tem algo a mais que alguém não viu no livro???
é eu tenho esse livro… vou dar uma olhada nesse capitulo e ter mais atenção nisso ai… puts foda questao assim… vou implementar aqui para ver… :D… valeu!!