t*()对于此示例,始终返回 true,而f*()始终返回 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为真|=,对它的任何操作都不会改变它的值。
慕雪6442864
撒科打诨
慕虎7371278
相关分类