Lógicamente, if(!foo)
y if(foo == false)
son equivalentes. ¿Cómo están representados en Java? ¿Hay alguna diferencia entre los dos después de la compilación, ya sea en el bytecode o en el rendimiento? No pude encontrar una respuesta en el JLS, y la búsqueda arrojó muchos resultados sobre el comportamiento = = = = typos y ==/igual() comportamiento. (En este caso, los símbolos obstaculizaron mi búsqueda, para futuros buscadores, operador de negación, es igual a falso, igual a falso, no condición).¿Cuál es la diferencia de rendimiento, si existe, entre if (! Foo) y if (foo == false) en Java?
Para evitar el debate de CW: esta pregunta NO es preguntando qué variante prefieren las personas o cuál se considera mejor estilo. Estoy interesado en las diferencias en la implementación del idioma, por lo que hay una respuesta correcta. Relacionados, pero no del todo-a-víctima: Difference between while (x = false) and while (!x) in Java?
EDIT:
El consenso general parece ser que un buen compilador debe optimizar estos a la misma cosa. Eso tiene sentido y es lo que sospechaba, pero, para hacer una pregunta aún MÁS académica, ¿es ese comportamiento en realidad obligatorio en cualquier lugar, o es "simplemente" lo razonable de hacer?
Tenga en cuenta que esto es específico del compilador. – danben
Hay dos preguntas aquí. El primero pregunta cómo se representa en Java (Bytecode). El segundo pregunta si hay diferencias en el rendimiento y el bytecode (supongo que el tamaño es el factor de preocupación aquí). –
Cualquier compilador que no reconozca esa optimización no llegará muy lejos en el mercado;) –