Эти операторы на самом деле являются двумя разными операторами.
int len = foo.length(); // Will run once
for (int i = 0; i<len;++i)
Здесь i<len
будет проверяться каждый цикл, хотя len - это просто переменная, которую можно прочитать.
for (int i = 0; i < foo.length(); ++i)
Здесь i < foo.length()
содержит вызов функции, и поскольку длина foo
может изменяться в самом цикле (например, вы можете удалить символы foo
вместо увеличения i
), функция foo.length()
будет вызываться каждый разитерация.
В некоторых языках foo может быть константой, а foo.length () может быть оптимизирован компилятором, но лучше сохранить, чем потом сожалеть.
Дополнительно некоторыеязыки могут допускать что-то вроде этого:
for (int i=0, len=foo.length();i<len;++i)
, что все равно спасает вас.