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.