我們注意到,Java的8使用Referential Transparency:當Java8使用引用透明
我測試許多代碼來檢測這個RT,如:
public class ReferentialTransparency {
public static int triple(int number) {
System.out.println(number);
try {
Thread.sleep(500);
} catch (Exception e) {
}
return number* 3;
}
public static void main(String[] args) {
List<Integer> vals=Arrays.asList(1,2,3,4,3);
System.out.println(vals.parallelStream()
.mapToInt(ReferentialTransparency::triple)
.sum());
}
}
控制檯:
3
4
2
1
3
39
我注意到Java 8運行三重方法,即使有一個出現兩次的元素,即3
。
我的問題,爲伊什特萬解釋是:
爲什麼不編譯器優化了重複調用的三倍(3) 如果三聯是引用透明?
你的問題到底是什麼?我相信這可以在不使用參考透明度的情況下得到解決/回答,這會使您的問題無效。 – skiwi
雖然我沒有看到問題,但問題的例子和答案的解釋都是信息性的。 – Daniel
我把這個問題解釋爲「如果'triple'是引用透明的,爲什麼編譯器不會優化重複調用'triple(3)'?」 – ikdc