Quem usa for( ; ; )?

6 respostas
J

Aeh galera,
alguem sabe se o uso de for( ; ; ) tem alguma vantagem sobre um while( true ), e o que justifica usar uma sintaxe tão obscura como essa.

Obrigado.

6 Respostas

smota

Não deve ter grande diferenca já que o compilador deve ser espertinho pra otimizar os 2 pra um simples JUMP.

Teoricamente o for é mais lento porque ele faz uma verificação (2o argumento) e uma instrução de passo (3o argumento) enquanto o while só faz 1 verificação.

E

isso não quer dizer que você tenha que usar somente while. Tome cuidado! :? :wink:

dsiviotti

Para um loop infinito normalmente se usa While.
for(;:wink: é coisa de C/C++, já vi muito for(EVER) onde ever é uma diretiva de compilador EVER = ;; :?

urubatan

pelo menos for(EVER) fica super legal de ler :slight_smile:

louds

Resultados identicos, use aquele que voce preferir.

Bani
Quando quiser comparar duas coisas do ponto de vista do que o Java vai fazer, utilize a sintaxe
javap -c NomeDaClasse
No caso eu criei dois métodos que faziam um i++ dentro de cada um dos loops, e o resultado foi o seguinte:
public void testFor();
  Code:
   0:   aload_0
   1:   dup
   2:   getfield        #2; //Field i:I
   5:   iconst_1
   6:   iadd
   7:   putfield        #2; //Field i:I
   10:  goto    0

public void testWhile();
  Code:
   0:   aload_0
   1:   dup
   2:   getfield        #2; //Field i:I
   5:   iconst_1
   6:   iadd
   7:   putfield        #2; //Field i:I
   10:  goto    0

}

Ou seja, os bytecodes gerados são idênticos.
Agora comparando do ponto de vista de prática de programação, na API do Java encontrei bem mais for(;;) do que while(true), pelo menos nas classes que já pesquisei, como por exemplo as de regexp.

Criado 2 de março de 2004
Ultima resposta 3 de mar. de 2004
Respostas 6
Participantes 7