我们注意到 java 8 使用参照透明 :
我测试了很多代码来检测这个 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
.
正如 Istvan 解释的那样,我的问题 是:
如果 Triple 是引用透明的,为什么编译器不优化对 Triple(3) 的重复调用?