Para "facilitar a explicacao" entenda a semantica de seu programa :
int i = 1; cria-se uma variavel do tipo primitivo int com valor 2 i += i++; O que o COMPILADOR faz ? // i += i++; faz um "parse" de seu código e substitui essa linha pela debaixo i = i + i++; O que o Java faz em TEMPO DE EXECUÇÃO ? Por prioridade, é resolvido ANTES a expressao DEPOIS é feita a atribuição (direita para esquerda) 2º 1º <atribuição> = <expressao> Porém, repare que você utilizou um POS incremento, sendo assim (i++) só será validado APÓS a expressão ser resolvida. i = i + i++ Resultado ? O compilador irá calcular (i + i), ou seja (1 + 1) que desde que eu nasci sempre valeu DOIS ! E agora ? É feito o POS-INCREMENTO em i ... (um "break") Pergunta : Quanto vale o "i" agora ? Resposta : UM, pois AINDA ESTAMOS VALIDANDO A EXPRESSAO. Lembre-se das prioridade descritas acima ! Não foi feita NENHUMA atribuição para a variável "i" ainda ... (voltando ...) Calculando o pos-incremento (i++) o resultado de "i" valerá DOIS ! Ou seja, i = i + 1 que vale 2. Ok ... Ok .... Então "i" agora vale 2 e a expressão vale quanto ? Já fizemos ANTES e sabemos que vale DOIS !!! Legal ! Então sabemos que a EXPRESSAO vale 2. O que falta fazer ? Só a ATRIBUIÇÃO !!! MOLEZA !!!! i += 2 então i = 3 ?????? Putz ! Fudeu, e agora ?!?!?!? ERRADO !!!!! LEMBRE-SE QUE O COMPILADOR JÁ MUDOU ESSA SEMANTICA NO MOMENTO DE "parsing" !!! ?!?!?!?!?! LEIA NO COMEÇO DO E-MAIL !!!!! (EU ESPERO AQUI UM POUCO ATÉ VOCE OLHAR .........) Então, continuando ... i = <resultado da expressao> , ou seja i = 2 !!!!!! Mas e o "i" do POS-INCREMENTO que já valia "2" também ?!?!?!? Ora !!!! O "i" que foi calculado como DOIS foi SUBSTITUIDO pelo NOVO valor da expressão calculada. Ou seja, DOIS !!!!! Como ?!?!? Imagine algo meio "esquisito" do tipo : i = 10 + 10; // "i" valerá 20 i = 2; System.out.println(i); // Adivinhe quanto vale o "i" ? Esse exemplo é TIPICO DE PROVA !!!!!!! Bons estudos !!!!! THE END Abraç[]s, Max Ricardo Mercurio Ribeiro IT & Business Consultant for Alcoa Company e-mail: [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> (company) / [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> (personal) phones # : (0x11) 9101-5511 mob. / (0x11) 3741-4418 com. -----Original Message----- From: Tenisson Chaves dos Santos Júnior [mailto:[EMAIL PROTECTED]] Sent: Wednesday, 15 de January de 2003 1:31 PM To: [EMAIL PROTECTED] Subject: [java-list] Dúvida em código Pessoal, No código abaixo , eu esperava obter "3" no valor da variável i. No entanto , o valor retornado é "2" . Alguém poderia me explicar o porquê disso ? public class Teste{ public static void main(String args[]) { int i=1 ; i += i++ ; System.out.println(i); } } Obrigado, Tenisson Chaves Jr. ------------------------------ LISTA SOUJAVA ---------------------------- http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] ------------------------------------------------------------------------- ------------------------------ LISTA SOUJAVA ---------------------------- http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] -------------------------------------------------------------------------