Как сказано в моем заголовке, мне было интересно, упрощаются ли выражения, включающие константы, определенные при создании экземпляра, во время компиляции?
Например, у меня есть класс кучи, где у меня есть финальное логическое значение 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 здесь, казалось бы, будет оцениваться полностью каждый раз, тогда как если бы куча была сделана максимальной кучей при создании экземпляра, вся правая часть выражения могла бы (и должна) просто игнорироваться.