Iteração Estranha (Sun Tech Days)

[code]public class IteracaoEstranha{

public static void main(String[] args) {
	int j = 0;
	for(int i=0; i&lt100;i++) {
		j = j++;
	}
	System.out.println(j);
}

}[/code]
Pessoal estive no Sun Tech Days 2007 e uma das palestrantes mostrou diversos códigos e dava alguma alternativas pra gente escolher, em uma das perguntas ela mostrou este código, e até agora não consegui entender, pois pensava de um jeito e fiz um teste colocando

j = ++j;

acreditando que não funcionaria, mas assim funciona acabando com a minha tese.

Alguém poderia me explicar, ou alguém que foi a palestra

Vlw :slight_smile:

E o resultado ainda da 0 hahahahah q doideira…

Desculpe não está errado, eu não consigo entender porque o valor final de ‘j’ sempre será ‘0’ (Zero)… :?:

pra deveria de dar 100…mas ele não sai do zero

Está certo, vai dar zero mesmo.

j recebe j e depois é incrementado, só que uma instância diferente.

Tanto é que se você for compilar numa IDE, Eclipse por exemplo, lá mesmo será dito que isso é um trecho sem efeito.

essa parte da instância diferente não compreendi, eu ja debuguei o código e num da nenhuma dica do q acontece.

Obs: Porcaria do meu Eclipse nem falou isso :evil:

Não é porcaria de Eclipse, hehehe…

Na verdade você tem que definir os níveis de mensagens ao compilar, no menu:

Window -> Preferences -> Java -> Compiler -> Errors/Warnings

O que faz o j++?

Ele retorna o valor de j e depois incrementa j.

O que acontece com j = j++ ?

  1. A JVM avalia o valor da expressão j++ (Que é zero)
  2. A JVM incrementa o valor de j (de 0 para 1)
  3. A JVM seta o valor da expressão pegado no primeiro passo na variavel j (setando o valor de j de volta para zero)

Para quem manja de bytecode do Java - ele faz o seguinte:

        iload_1 j // pega o valor de j e joga na pilha
        iinc j 1  // incrementa o valor de j
        istore_1 j // pega o valor da pilha e seta no j

[]s,
Sami