2013-04-13 2 views
30

Что такое соглашение для бесконечного цикла в Java? Должен ли я писать while(true) или for(;;)? Я лично использовал бы while(true), потому что я использую в то время как циклы реже.Java: Бесконечная петлевая конвенция

+6

Я предпочитаю делать 'while (running)', поэтому у меня есть выход из него. – NilsH

+2

'break' может выйти. – Justin

+5

для (;;) не очень. в то время как (работает) является _LOT_ более читаемым – radai

ответ

66

Нет разницы между байт-кодом между while(true) и for(;;), но я предпочитаю while(true), так как он менее запутанным (особенно для кого-то нового для Java).

Вы можете проверить его с помощью этого кода примера

void test1(){ 
    for (;;){ 
     System.out.println("hello"); 
    } 
} 
void test2(){ 
    while(true){ 
     System.out.println("world"); 
    } 
} 

При использовании команды javap -c ClassWithThoseMethods вы получите

void test1(); 
    Code: 
     0: getstatic  #15     // Field java/lang/System.out:Ljava/io/PrintStream; 
     3: ldc   #21     // String hello 
     5: invokevirtual #23     // Method java/io/PrintStream.println:(Ljava/lang/String;)V 
     8: goto   0 

    void test2(); 
    Code: 
     0: getstatic  #15     // Field java/lang/System.out:Ljava/io/PrintStream; 
     3: ldc   #31     // String world 
     5: invokevirtual #23     // Method java/io/PrintStream.println:(Ljava/lang/String;)V 
     8: goto   0 

, который показывает ту же структуру (кроме «привет» против «мира» строк).

+9

+1: для объяснения – Aubin

+1

+1 для различения «легкого» для чтения и * понимания *. Что-то в каждом другом ответе не получилось. – ChiefTwoPencils

+1

Я думаю, что пришло время для Java придумать бесконечную конструкцию цикла, поэтому нам не нужны обходные пути, как и другие языки. Могу ли я предложить 'do {}' без 'while', или просто' loop {} '. –

12

Я предпочитаю while(true), потому что я использую в то время как петли реже, чем для циклов. Для петель лучше использовать и while(true) намного чище и легко читается, чем for(;;)

+1

Еще один аргумент в пользу while (true) - это ремонтопригодность: true может стать логическим условием в будущем – Aubin

+5

@Aubin OTOH, 'for (;;)' приятнее при игре в гольф –

+3

@Aubin, так может и средняя часть ' for'! Просто вставьте его как 'for (; condition(););'. Использование 'for' также означает, что вы можете легко добавить переменную для подсчета итераций цикла (или другого« между итерациями ») после второй из двух полуколей. – AJMansfield

6

Это зависит от вас. Я не думаю, что существует такая конвенция. Вы можете использовать while(true) или for(;;)

Я бы сказал, что чаще всего встречаюсь с while(true) в исходниках. for(;;) реже используется и труднее читать.

+1

Еще один аргумент в пользу while (true) - это ремонтопригодность: истина может стать логическим условием в будущем – Aubin

+0

Нет ничего «трудного для чтения» о 'for ...' его трехбуквенном слове. – ChiefTwoPencils

3

В конечном счете, это ваш выбор. Следующая ссылка Java использует формат for (;;): The for Statement.

Тем не менее, while(true) используется чаще в бесконечных циклах в моем опыте.

+0

+1 для справки – Aubin

+0

И [Операторы while и do-while] (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/while.html) делает это с 'while (true)' – Justin

0

for(;;) отстой, совершенно неинтуитивно читать новобранец. Вместо этого используйте while(true).

Смежные вопросы