在 Java 中,if(!foo) 和 if(foo == false) 之间的性能差异(如果有)是什么?
2022-09-03 08:31:44
从逻辑上讲,它们是等效的。它们在Java中是如何表示的?编译后,两者之间在字节码或性能方面是否有任何差异?我无法在JLS中找到答案,搜索结果显示了很多关于= vs. == 拼写错误和==/equals()行为的结果。(在这种情况下,符号阻碍了我的搜索;对于未来的搜索者,否定运算符等于false,等于false,而不是条件)。if(!foo)
if(foo == false)
为了阻止CW辩论:这个问题不是问人们更喜欢哪种变体或哪种风格更好。我对语言实现的差异很感兴趣,所以有一个正确的答案。相关但不完全是重复的:Java中的 while (x = false) 和 while (!x) 之间的区别?
编辑:
普遍的共识似乎是,一个好的编译器应该将它们优化为同一件事。这是有道理的,也是我所怀疑的,但是 --问一个更学术的问题-- 这种行为是否真的在任何地方被强制要求,或者它“仅仅是”合理的事情?