当我编写 BST 查找函数时:
public static boolean find(Node root, int value){
if(root == null){
return false;
}
Node iter = root;
while(iter != null){
.....
}
return false;
}
编译器会删除
if(root == null){
return false;
}
或者没有。因为我无论如何都会在 while 循环中检查条件。
谢谢。
ps。我刚刚意识到,我是按值传递的,所以不需要 iter Node..太多的 C
最佳答案
这取决于您的优化。如果您进行了全面优化,并且编译器可以证明删除初始 if 不会更改函数的输出,那么它可能会删除它。
在您提供的确切代码示例中,我敢说编译器确实可以优化第一个 ifaway。
关于java - 编译器优化: will double checking a case cause removal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20108012/