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为真,任何|=操作都不会改变它的值。