t*()
всегда возвращает true для этого примера, где f*()
всегда возвращает false.
Допустим, у нас есть следующее выражение
if ( f1() || t1() || f2() || t2() ){
// do stuff
}
Если это так,JVM оптимизирует выполнение и выполняет только f1()
и t1()
, потому что она «понимает», что независимо от того, что дают f2()
и t2()
, требование для ввода оператора if выполняется и поэтому дальнейшие вычисления не требуются.
Я работаю над кодом, в котором я написал что-то вроде этого:
boolean b = false;
b |= f1(); // A
b |= t1(); // B
b |= f2(); // C
b |= t2(); // D
Один из моих коллег увидел это и сказал, что он не уверен, но возможно, что Javaоптимизирует операторы C и D, потому что b
всегда true
от оператора B
и далее, и это может привести к некоторым проблемам.
Я провел некоторые тесты, кажется, что все они работают правильновыполнено (это желаемое поведение), но я все еще задаюсь вопросом почему это не оптимизируется? Я подумал, что он может быть прав, и JVM понимает это однажды b
верно, нет |=
операция над ним изменит свое значение.