Я часто встречаю случаи, когда я хочу использовать закодированный цикл for для некоторой коллекции или массива, которые я получаю от некоторого объекта.Enhanced for loop
например.
items = basket.getItems();
for (int item : items) {
// Do something
}
Другой способ сделать это:
for (int item : basket.getItems()) {
// Do something
}
Второй является более компактным и улучшает читаемость на мой взгляд, особенно когда переменная item
не будет использоваться в любом другом месте.
Я хотел бы знать, влияет ли получатель в выражении for на производительность. Будет ли он оптимизирован для чего-то похожего на 1-й? Или он будет получать доступ к геттеру каждый раз? Конечно, getItems()
может сделать что-то довольно медленное (например, доступ к сети и т. Д.)
Вопрос аналогичен некоторым другим, но относится к получателю самого массива collection/array, а не к его размеру. Однако в конечном итоге это может быть один и тот же случай.
Почему бы вам не проверить его? Просто поставьте 'println' в этот getter. –
Тестирование в моей конкретной конфигурации и для конкретного объекта не приведет к правильному ответу, так как было бы неправильно обобщать мои конкретные результаты. – LyK
@tobias_k, хорошее мышление. но может ли быть (теоретически), что компилятор не заменит вызов 'basket.getItems()' ссылкой, когда метод фактически делает что-то большее, чем просто возвращает ссылку? – GameDroids