Странные циклы, используемые в Spliterator of Java 8
Кто-нибудь знает, почему java.util.Spliterator
реализация использует циклы do-while, а не while, когда тело цикла пустое? Например, реализация forEachRemaining
является:
default void forEachRemaining(Consumer<? super T> action) {
do { } while (tryAdvance(action));
}
Зачем им использовать
do { } while (tryAdvance(action));
вместо
while(tryAdvance(action));
?
Есть ли какие-то преимущества, о которых я не знаю?
1 ответ
Проверка логики выполняется после тела do{}. Это может быть использовано многими способами, но делает то же самое, что и цикл while с проверкой логики в конце. Поскольку do {} пуст, поток будет ждать до получения уведомления, а затем выполнить логическую проверку, а не выполнять логическую проверку, а затем при истинном ожидании.