Он будет вызываться на каждой итерации, если только компилятор / оптимизатор не решит, что у него нет побочных эффектов и, возможно, может исключить вызов в качестве оптимизации.
Я имею в виду, что компилятор не может просто слепо хранить значение, потому что функция в java, в отличие от математической функции, может иметь не только возвращаемое значение, но и такие побочные эффекты, как печать чего-либо в некоторый поток или изменение некоторого глобального состояние и т. д.
Существует также другая причина, по которой компилятор не может пропустить вызов при каждой итерации. Тот факт, что ваша функция не принимает никаких аргументов, не означает, что она обязательно будет возвращать одно и то же значение каждый раз. Например, он может вводить число из потока и возвращать его или генерировать число случайным образом.
Таким образом, компилятор должен быть предельно осторожным, прежде чем он сможет безопасно исключать вызовы. Так что, если функция дорогая, вы должны предварительно сохранить ее значение.