Frage

int i = 10 + 20;

Ist es wahr, dass der Compiler den Code verarbeitet, das Hinzufügen 10 + 20 und die Byte-Code ist das gleiche wie für diese Zeile Code?

int i = 30;

Wo kann ich über sie gelesen?

War es hilfreich?

Lösung

Ja, und Sie können es sogar überprüfen Sie selbst. Nehmen Sie eine kleine Java-Datei, zum Beispiel:

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

Compile es mit javac Main.java, und führen Sie javap -c Main es zu zerlegen:

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

}

Klar im Bytecode, können Sie die Compiler-Optimierung sehen: bipush 30

Andere Tipps

Ja. Diese Compiler-Optimierung konstanten Falten genannt. Es gibt einen anderen Compiler-Optimierung genannt spärlich bedingte Konstantenpropagation , die etwas Ähnliches tut.

In der Regel gibt es keine Garantie, dass ein gegebener Compiler Konstanten tatsächlich klappen, aber heutzutage fast jeden Compiler für jede Sprache dies tut. Insbesondere erfordert die Java Language Specification dass konstante Ausdrücke bei der Kompilierung ausgewertet werden.

Ja, es wird vereinfacht werden nach Bedarf durch die JLS (dank @EJP für diese Präzision).

Wenn Sie mehr Ressourcen und javac Optimierung wollen, sollten Sie einen Blick auf Compiler-Optimierungen oder Java Compiler .

Eine weitere interessante Sache ist, dass selbst wenn der Code während der Kompilierung optimiert ist, wird eine zweite Optimierung während der Laufzeit mit Hotspot .


Ressourcen:

Auf dem gleichen Thema:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top