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