Ответы уже приведены правильно.
Однако я хочу указать, что это не так, что в цикле нет тела. Вы должны это рассмотреть после компиляции. Это становится:
- Initialize я при 100
- Initialize J при 200
- Приращение я
- Декремент J
- Если нет (я < J), перейти к 7
- Перейти к 3
- Печатание и прочее
Петля в этом случае составляет от 3 до 6 и имеет корпус (приращение i декремент j) и проверку состояния в точке 5.
Чтобы сделать его более ясным, я напишу еще один цикл, функционально идентичный, но с a body:
while (true) {
i++;
j--;
if (!(i<j)) break;
}
Теперь этот цикл имеет тело, но, вероятно, скомпилированная версия этого цикла и предыдущего идентичны.
Однако мы могли бы обозначить «Пустое тело» петлю, которая не имеет побочных эффектов.Например, этот цикл:
for (int i = 0; i < 10000; i++);
Этот цикл является «действительно» пустым: не имеет значения, если вы выполняете его или нет, это не дает или взять что-нибудь от остальной части программы (если не задержка) ,
Таким образом, мы могли бы определить его «без какого-либо значения» больше, чем «пустое от любого тела».
В этом случае JIT заметит это и уничтожит его.
В этом смысле, ваш цикл может быть:
for (int i = 100, j = 200; i < j; i++, j--);
Здесь, так как «я» и «J» объявляется «внутри» цикл (не существует вне его сферы применения), то этот цикл не имеет смысла и будет уничтожена.
Возможно, это то, что означает Герберт Шильдт (что я допускаю, что не знаю)?
Также см. Здесь Java: how much time does an empty loop use? о пустых петлях и JIT.
Да, ваше понимание верное. Также '++' будет убедиться, что 'i' станет = или>' j' в какой-то момент. – Nivas
Вы верны – ControlAltDel
@Aeshang Это неверно. Цикл будет «работать» до тех пор, пока условие не будет выполнено. – Nivas