Considérez la méthode suivante en Java:optimisations des expressions booléennes dans Java
public static boolean expensiveComputation() {
for (int i = 0; i < Integer.MAX_VALUE; ++i);
return false;
}
Et la principale méthode suivante:
public static void main(String[] args) {
boolean b = false;
if (expensiveComputation() && b) {
}
}
conjonction logique (comme & &) est un commutative operation. Alors, pourquoi le compilateur ne pas optimiser le code instruction if à l'équivalent:
if (b && expensiveComputation()) {
}
qui a le benefits of using short-circuit evaluation?
De plus, le compilateur essaie-t-il d'effectuer d'autres simplifications logiques ou permutation de booléens afin de générer du code plus rapide? Si non, pourquoi? Certes, certaines optimisations seraient très difficiles, mais mon exemple n'est pas simple? Appeler une méthode devrait toujours être plus lent que de lire un booléen, non?
Merci d'avance.
Ceci est un exemple stupide - c'est quelque peu différent avec un ||. Pourquoi ne pas simplement mettre l'effet secondaire dans le calcul coûteux, cela illustrerait bien le point. –
Ce n'est pas vraiment différent avec un '||'. Le même type d'optimisation pourrait être fait, et il a les mêmes implications. C'était juste le premier exemple que j'ai pensé qui a un effet immédiatement notable, et cela était lié à son exemple. – Sean