Логически, if(!foo)
и if(foo == false)
эквивалентны. Как они представлены на Java? Есть ли разница между двумя после компиляции, либо в байте-коде или в производительности? Я не смог найти ответ в JLS, и поиск привел к большим результатам о действиях = vs. == typos и ==/equals(). (В этом случае символы мешали моему поиску, поскольку будущие искатели, оператор отрицания, равны ложному, равному false, а не условию).
Чтобы обсудить обсуждение CW: этот вопрос НЕ спрашивает, какой вариант предпочитают люди или который считается лучшим стилем. Меня интересуют различия в реализации языка, поэтому есть правильный ответ. Связанный-но-не-вполне-a-dupe: Разница между while (x = false) и while (! X) в Java?
EDIT:
По общему мнению, хороший компилятор должен оптимизировать их для одного и того же. Это имеет смысл и является тем, что я подозревал, но, чтобы задать еще более академический вопрос, - это то, что поведение действительно предусмотрено где угодно, или это "просто" разумная вещь?