logisch, if(!foo)
und if(foo == false)
sind gleichwertig. Wie sind sie in Java vertreten? Gibt es einen Unterschied zwischen den beiden nach der Kompilierung, entweder im Bytecode oder in der Performance? Ich konnte keine Antwort in der JLS finden und die Suche ergab viele Ergebnisse über = vs. == Tippfehler und ==/equals() Verhalten. (In diesem Fall behinderten die Symbole meine Suche; für zukünftige Sucher ist der Negationsoperator gleich falsch, gleich falsch, nicht Bedingung).Was ist der Leistungsunterschied zwischen if (! Foo) und if (foo == false) in Java?
Um die CW-Debatte abzuwenden: Diese Frage fragt nicht, welche Variante die Leute bevorzugen oder welche als besser angesehen wird. Ich interessiere mich für die Unterschiede in der Umsetzung der Sprache, also gibt es eine richtige Antwort. Ähnlich-but-not-quite-a-Betrogene: Difference between while (x = false) and while (!x) in Java?
EDIT:
Der allgemeine Konsens, dass ein guter Compiler diese auf dasselbe hinaus optimieren sollte zu sein scheint. Das macht Sinn und ist das, was ich vermutete, aber - um eine noch akademischere Frage zu stellen - ist dieses Verhalten eigentlich irgendwo vorgeschrieben, oder ist es "nur" das Vernünftige, was zu tun ist?
Beachten Sie, dass dies compilerspezifisch ist. – danben
Hier sind zwei Fragen. Der erste fragt, wie es in Java dargestellt wird (Bytecode). Die zweite fragt, ob es Unterschiede in der Leistung und im Bytecode gibt (ich nehme an, dass die Größe hier der relevante Faktor ist). –
Jeder Compiler, der diese Optimierung nicht erkennt, wird es nicht sehr weit auf dem Markt machen;) –