cheer писал(а): ↑28.12.2007 22:21
Э? Какое условие пришлось бы проверять в java, причём два раза? Насчёт компактности:
компактнее, чем
Внимательнее пожалуйста. Во первых не путаем i и j, во вторых в некоторых компиляторах(при некоторых настройках) первый вариант не пройдёт, в третьих int j; всего лишь объявление, и не порождает кода(если это встроенный тип, вроде int), в четвёртых, это разный код, если есть разница в области видимости j.
Почему я использовал более длинную запись(но не более длинный/дорогой код!):
1) Более переносимо вниз, к старым компиляторам/стандартам.
2) Возможность использовать j после цикла.
По поводу проверок: проверка внутри условия цикла дублирует проверку выхода за границу массива, очень частый, но не обязательный случай. Сомневаюсь, что компилятор языка типа java уберёт дублирующую проверку в данном случае, и уверен, что с этим не справится интерпретатор. Проверку выхода левее нуля не уберёт не тот не другой, в этом я почти уверен. В итоге, простенький цикл выполнится в 5-500 раз быстрее на С/С++ чем на java. Нужны тесты?