Estava olhando o guia de certificação do Rafael Pereira e tem uma pergunta com o seguinte for
for(;;){
System.out.println("go");
}
Esse tipo de for apesar de ser esquisito ele é compilado e gera um loop infinito.
Mas se eu coloca-lo antes de um system.out.println ele não compila
e se eu colocar depois compila normalmente.
antes:
public static void main(String [] args){
System.out.println("teste de for Bizarro");
for(;;){
System.out.println("go");
}
}
depois:
public static void main(String [] args){
for(;;){
System.out.println("go");
}
System.out.println("teste de for Bizarro");
}
Imagino que seja porque o compilador reconhece que há um comando após um laço infinito e não permite que isso aconteça já que esse comando nunca vai ser executado, no caso do println() estar depois do for.
O compilador não deu um detalhe específico depois da tentativa de compilação não?
Ele não é tão burrinho assim, o compilador checa se a expressão de checagem não foi passada ou se foi passado true. Nestes casos ele procura se tem algum “break” dentro de for, se não tiver é por que nunca vai sair dali e o trecho abaixo é inalcançável, daí o erro.
Esse for (que o sr. Gosling copiou da linguagem C) é o tipo de coisa que dá um “nó na cabeça” de quem vem de qualquer outra linguagem, já que é equivalente a: