考慮以下幾點:這是java中循環的有用優化嗎?
1.
for (final Bar a : bars) {
for (final Foo f : foos) {
doSomethingWith(f.foo(), a.bar());
}
}
和:
2.
for (final Bar a : bars) {
final Object bar = a.bar();
for (final Foo f : foos) {
doSomethingWith(f.foo(), bar);
}
}
是這種優化的真正的幫助或將編譯器自動執行,無論如何?
如果bar()是一個getter,你的回答會改變嗎? (例如getBar())
如果我的目標是Android開發,您的答案會改變嗎?
工作,爲學生:編譯兩個版本,並比較字節碼輸出。這裏是一個參考; https://docs.oracle.com/javase/7/docs/technotes/tools/windows/javap.html – DwB
嗯,我不認爲這個問題是一個學生水平的問題,但哦,我想知道如果任何人已經知道答案而不是告訴我可以看看輸出字節碼,我知道我可以。而且,我也必須看看android的輸出。這可能是我自己回答這個問題的一個項目。 –
編譯器是否可以知道'a.bar()'將始終爲給定的'a'返回相同的值? –