я интересно, что компилятор делает за сценой, когда я пишу for loop
как этотЧто происходит за кулисами, когда я пишу цикл, как этот
1.
for(ChildObject child : parentObject.getChildObjects()){
//do something
}
вместо
2.
List<ChildObject> myList = parentObject.getChildObjects();
for(ChildObject child : myList){
//do something
}
заявление parentObject.getChildObjects()
является JPA заявление и принести тип LAZY.
ПРИМЕЧАНИЕ: Я прочитал Java документ из for-each
цикла (http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html), однако они не упоминается случай, как выше.
Так что я знаю, как работает цикл, но не знаю, что происходит со списком, возвращаемым из инструкции parentObject.getChildObjects()
.
Моих сомнения:
В первом случае компилятор сохранение списка вернулся из
parentObject.getChildObjects()
заявления в некоторых переменной температуре, которая скрыта от программиста или звонят оператор каждый раз?Если он высылает заявление
parentObject.getChildObjects()
, каждый раз; Как он отслеживает следующие элементы?
Используйте 'javap' для декомпиляции вашего класса, чтобы увидеть разницу. –
Вы прочитали * руководство. * Попробуйте [Спецификация языка Java] (http://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.14.2). Он полностью отвечает на этот вопрос. – EJP
@EJP Или просто [лучшее руководство] (https://blogs.oracle.com/CoreJavaTechTips/entry/using_enhanced_for_loops_with). – biziclop