Я предполагаю, что проблема заключается в производительности, поскольку с точки зрения читаемости кода и ремонтопригодности версия for-loop явно выигрывает от подавляющего преимущества.
Если код в теле цикла занимает столько же времени, сколько и вызов println, это не имеет значения.
Если тело петли было очень маленьким и быстрым, то основными затратами будут любые ошибочно предсказанные условные ветви или промахи в кеше. Если аппаратное обеспечение ошибочно считает следующую инструкцию после загрузки условной ветви в конвейер, она должна очистить весь конвейер после того, как ветвь достигнет стадии выполнения. Это действительно стоит.
Версия if может привести к менее типичной условной схеме ветвления, чем для цикла. Ожидается, что предсказание отраслевой ветви лучше работает на общих идиомах, которые часто появляются в тестах, которые использовались при его разработке.
Кэшированные промахи могут вызывать ларьки, в то время как процессор получает данные в логику выполнения. Версия if длиннее из-за наличия трех копий тела цикла, поэтому она имеет более высокий риск промахов кэша команд. Они используют одни и те же данные, поэтому они в равной степени могут испытывать промахи кэшей данных.
Мое предположение заключается в том, что если есть измеримое различие, версия для цикла, скорее всего, будет быстрее. Это только предположение.
Если производительность вашей программы действительно зависит от того, как этот цикл написан, вы должны сравнить его. Из-за зависимости от тонкостей предсказания отраслевой ветви я предлагаю сравнить ваши программы с каждой версией на максимально возможном количестве различных процессоров. Если это недостаточно критично для производительности вашей программы, чтобы оправдать это усилие, придерживайтесь for-loop.
Для петли лучше. Вы можете изменить требование в будущем и добавить счетчик 3+.Не хотите копировать вставку 'System.out ...' s и добавлять 'else-if's –
Придерживаясь DRY (не повторяйте себя), я бы выбрал первый. – nhahtdh
Под «лучше» вы на самом деле имеете в виду «быстрее»? –