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

Responder a