Question

int i = 10 + 20;

Est-il vrai que le compilateur traitera ce code, en ajoutant 10 + 20, et le code d'octets est le même que pour cette ligne de code?

int i = 30;

Où puis-je lire à ce sujet?

Était-ce utile?

La solution

Oui, et vous pouvez même le vérifier par vous-même. Prenez un petit fichier Java, par exemple:

public class Main {
  public Main() {
    int i = 10 + 20;
  }
}

Compile avec javac Main.java, puis exécutez javap -c Main de le démonter:

Compiled from "Main.java"
public class Main extends java.lang.Object{
public Main();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   bipush  30
   6:   istore_1
   7:   return

}

Il est clair que dans le bytecode, vous pouvez voir l'optimisation du compilateur: bipush 30

Autres conseils

Oui. Cette optimisation du compilateur est appelé pliage constante href="http://en.wikipedia.org/wiki/Constant_folding". Il y a une autre optimisation du compilateur appelé clairsemée propagation conditionnelle constant qui fait quelque chose de similaire.

En général, il n'y a aucune garantie qu'un compilateur donné sera effectivement plier des constantes, mais de nos jours à peu près tous compilateur pour toutes les langues fait cela. En particulier, le Java Language Specification exige que expressions constantes évaluées au moment de la compilation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top