Iteração Estranha (Sun Tech Days)

6 respostas
neohacker
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);
	}
}
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 :)

6 Respostas

L

E o resultado ainda da 0 hahahahah q doideira…

neohacker

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

J

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.

neohacker

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:

J

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

Sami_Koivu

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

Criado 23 de abril de 2007
Ultima resposta 23 de abr. de 2007
Respostas 6
Participantes 4