class Demo
{
public static void main(String [] args)
{
boolean b,t=true,f=false;
b=f && f || f && f || f && f || f && f ;
System.out.println(b);
//当然结果明显是FALSE,但是我很好奇这个长句是怎么运算的。于是用t替换一些f,然后看答案和我想的是否一样。可是就是不一样的啊。
//一个多小时就搞这一题了。 大师,详细请教 f && f || f && f || f && f || f && f 的运算顺序。。
}
}
b=f && f || f && f || f && f || f && f ;
等价于 b=(f && f) || (f && f) ||( f && f) ||( f && f) ;
1. 假如编译器不优化的情况下:如上挨个计算每个&&,最后或||出答案
2.实际情况是,编译器不仅优化了,而且优化力度很大,化简为 b=f;因为四个相同的表达式或在一起,直接取一个表达式即可 b=f && f;同理,两个相同的表达式与了,结果肯定是那个表达式的值,于是b=f。
现代编译器的优化技术对这种case,相 ...
b=f && f || f && f || f && f || f && f ;
等价于 b=(f && f) || (f && f) ||( f && f) ||( f && f) ;
1. 假如编译器不优化的情况下:如上挨个计算每个&&,最后或||出答案
2.实际情况是,编译器不仅优化了,而且优化力度很大,化简为 b=f;因为四个相同的表达式或在一起,直接取一个表达式即可 b=f && f;同理,两个相同的表达式与了,结果肯定是那个表达式的值,于是b=f。
现代编译器的优化技术对这种case,相信可以轻易处理掉。另外,所谓的“短路”其实也是一种编译优化技术。
当f=false那样时,你可以把 b=f && f || f && f || f && f || f && f ;等价于b=f && *;因为已经有flase了,右边的不参与运算,所有结果为false。。。。同理,当用t将f换掉时,b=t && t || t && t || t && t || t && t ;等价于b=t && t || *;也等价于b = t || *,所有结果为true。