t*()
对于本例,总是返回 true,而 asf*()
总是返回 false。
假设我们有以下表达式
if ( f1() || t1() || f2() || t2() ){
// do stuff
}
如果是这种情况,JVM 会优化执行并仅执行f1()
,t1()
因为它“理解”无论如何f2()
和t2()
yield,输入 if 语句的要求得到满足,因此不需要进一步的计算。
我正在编写这样的代码:
boolean b = false;
b |= f1(); // A
b |= t1(); // B
b |= f2(); // C
b |= t2(); // D
我的一位同事看到了这一点并提到他不确定,但 Java 可能会优化语句 C 和 D,因为b
总是true
从语句B
开始,这可能会导致一些问题。
我进行了一些测试,似乎所有测试都正确执行(这是所需的行为),但我仍然想知道为什么不进行优化?我认为他可能是对的,JVM 明白一旦b
为真,任何|=
操作都不会改变它的值。