正如我在标题中总结的那样,我想知道在编译时是否会简化涉及实例化时定义的常量的表达式?
例如,我有一个堆类,其中有一个最终布尔 isMinHeap,其值在堆的构造函数中设置。然后堆的方法在某些地方使用这个布尔值。编译器可以对此进行优化以简化所有这些涉及此布尔值的表达式,还是每次调用方法时都会完整计算表达式?
谢谢!
编辑:因为有人问我一个更具体的例子,所以每次从堆中删除一个节点时都会调用一个方法(以帮助重新堆化树):
private boolean requiresRepositioningDown(BTNode<T> node)
{
boolean childIsSmaller = (node.getLeft().getValue().compareTo(
node.getValue()) < 0)
|| (node.getRight() != null && node.getRight().getValue().compareTo(
node.getValue()) < 0);
if (isMinHeap && childIsSmaller || !isMinHeap && !childIsSmaller)
return true;
else
return false;
}
此处带有 isMinHeap 的表达式似乎每次都会被完整评估,而如果在实例化时将堆设为最大堆,则表达式的整个右侧可以(并且应该)被忽略。