指出以下两段程序的差别,并分析:
final class Accumulator{
private double result=0.0D;
public void addAll(double[] values){
for (double value :values){
result += value;
}
}
}
final class Accumulator2{
private double result=0.0D;
public void addAll(double[] values){
double sum = 0.0D;
for (double value :values){
sum += value;
}
result += sum;
}
}
结论:第二种写法比第一种写法出现不一致的概率要小,因为我们在方法完成之前,读不到中间状态的脏数据