1 回答

TA貢獻1802條經(jīng)驗 獲得超5個贊
不。
Java 無法知道someObject.getPrivateArray()
每次調(diào)用都會返回相同的對象。因此,它必須在每次迭代時調(diào)用該函數(shù)。
例如)
Queue<int[]> queue = ...;
for(int i=0; i<queue.remove().length; i++) {
// ...
}
這是完全相同的代碼模式;只是名稱發(fā)生了變化,但很明顯 的返回值queue.remove()
不會被緩存。
更新
@MattTimmermans 在評論中指出,JVM 可能會內(nèi)聯(lián)調(diào)用someObject.getPrivateArray()
,這樣 JVM 可能能夠確定每次都返回相同的對象,并優(yōu)化調(diào)用。這需要:
someObject
是最終的或有效的最終getPrivateArray()
是最終的,所以它可以內(nèi)聯(lián)getPrivateArray()
必須沒有副作用(或者無論如何都必須執(zhí)行副作用)返回的值必須是
final
其他一些實體不能修改的,保證返回相同的值
在這種情況下,JVM可能會優(yōu)化調(diào)用并將提取移出循環(huán),從而有效地緩存結(jié)果。當(dāng)自己緩存值很容易時,我不會依賴它。
添加回答
舉報