Это действительно работает, но поведение зависит от того, в каких условиях вы тестируете. Например. этот код:
int i = 2;
int j = 4;
do while(j > 0) {
i--; j--;
System.out.println("i:" + i + " j:" + j);
} while(i > 0);
выходы:
i:1 j:3
i:0 j:2
i:-1 j:1
i:-2 j:0
Так что работает как:
while(j>0) {
}
Принимая во внимание обмен имен переменных:
do while(i > 0) {
//.. same as above
} while(j > 0);
Вывод:
i:1 j:3
i:0 j:2
Похоже, что он ведет себя так же, как и в первом случае (то есть рассматривается первое время), но здесь приложение не завершается!
Резюме:
В то время, когда testA
больше не удовлетворен больше и testB
также не удовлетворен , код работает как обычный цикл while(testA){}
.
Но: Если в момент, когда testA
больше не удовлетворено , testB
все еще удовлетворено , цикл равен не выполняется больше, и скрипт не заканчивается . Это применимо только в том случае, если необходимо изменить условие «внешнего» цикла внутри цикла.
Обновление:
И после прочтения другого ответа, я понимаю, что это именно то, что поведение вложенного цикла do-while
- while
.
В любом случае, извлеченный урок: не используйте этот синтаксис, потому что он может сбить вас с толку;)