Wann werden die Binäroperatoren in Java ausgeführt?

Ich versuche, Java-Bytecode zu verstehen. Ich habe mit einem einfachen Beispiel angefangen:

public class Test
{
    public static void main(String args[])
    {
        System.out.println(2 + 1);
    }
}

Ich habe diese Klasse kompiliert:

javac Test.java

Und dann habe ich versucht, einjavap in der .class wie folgt:

javap -c Test

was hat mir das gegeben:

Compiled from "Test.java"
public class Test {
  public Test();
    Code:
       0: aload_0       
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return        

  public static void main(java.lang.String[]);
    Code:
       0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
       3: iconst_1      
       4: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V
       7: return        
}

Ich könnte einen Sinn daraus machen, abgesehen von dieser Zeile:

public static void main(java.lang.String[]);
. . . 
3: iconst_1    
. . .

enn ich mir meine Quelle und diesen Bytecode ansehe, sieht es so aus, als hätte Javac den Vorgang des Hinzufügens für diese Anweisung bereits ausgeführt:

2+1

nd fordern Sie jvm auf, diese Konstante zurückzugebe

Kann mich jemand korrigieren, wenn mein Verständnis falsch ist? Führt javac die Kompilierungsoperation für @ au+,-,* etc bevor es tatsächlich auf dem jvm läuft? Wenn das so ist, wie

Antworten auf die Frage(2)

Ihre Antwort auf die Frage