Quando a execução dos operadores binários acontece em Java?
Estou tentando entender o código de bytes java. Comecei com um exemplo simples:
public class Test
{
public static void main(String args[])
{
System.out.println(2 + 1);
}
}
Eu compilei esta classe:
javac Test.java
E então eu tentei umjavap
na classe. assim:
javap -c Test
o que me deu o seguinte:
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
}
Eu poderia fazer sentido com isso, além desta linha:
public static void main(java.lang.String[]);
. . .
3: iconst_1
. . .
olhando para a minha fonte e este código de bytes, parece que o javac já fez a operação de adição para esta declaração:
2+1
e pedindo à jvm para retornar essa constante.
Alguém pode me corrigir se meu entendimento estiver errado? O javac executa a operação de compilação para+
,-
,*
etc antes que ele realmente execute na jvm? Se sim, como?