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]
-------------------------------------------------------------------------