Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Alteração static para int loop

class Teste {
    int i = 3;

    public void m1(){
        for (new Teste().i = 10; new Teste().i < 100;
             new Teste().i++) {
            System.out.println(i);
        }    
    }

    public static void main(String[] a) {
        new Teste().m1();
    }
}

Nesse exemplo; imprimi-se um loop com o número 3; porque desse comportamento?

1 resposta
solução!

A variável "i" é um atributo do objeto , ou seja , cada instância(objeto) da classe Teste , tem o seu próprio i , então:

for (new Teste().i = 10; new Teste().i < 100;
             new Teste().i++) {
            System.out.println(i);
        }    

primeiro objeto , new Teste().i = 10 , i = 10

segundo objeto new Teste().i < 10; 3 < 10

terceiro objeto new Teste().i++; i = i+1

System.out.println(i) , sempre será 3 , porque se refere a o objeto atual.

o loop é criado porque o teste do for sempre será verdadeiro , visto que o valor de i que é alterado é em outro objeto , e não o responsável pela condição do for.

Caso seja feito :

Teste t = new Teste();

for (t.i = 10; t.i < 100; t.i++) {
            System.out.println(t.i);
        }    

Será impresso 10 a 99.