Когда происходит выполнение бинарных операторов в Java?

Я пытаюсь понять Java-байт-код. Я начал с простого примера:

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

Я скомпилировал этот класс:

javac Test.java

И тогда я попыталсяjavap на .class, как это:

javap -c Test

который дал мне это:

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        
}

Я мог бы понять из этого, кроме этой строки:

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

глядя на мой источник и этот байт-код, похоже, что javac уже выполнил операцию сложения для этого оператора:

2+1

и попросить JVM вернуть эту константу.

Может ли кто-нибудь исправить меня, если мое понимание неверно? Выполняет ли javac операцию по компиляции для+,-,* и т.д., прежде чем он действительно работает на JVM? Если так, то как?

Ответы на вопрос(1)

Ваш ответ на вопрос