public class Test {
public static void main(String[] args) {
float f1 = 1.4f;
System.out.println(f1 / 10);
float f2 = 1.4f;
System.out.println(f2 / 10f);
}
}
[faetzminator@fkaros ~]$ javac -version
javac 1.6.0_26
[faetzminator@fkaros ~]$ javap -c Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
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: ldc #2; //float 1.4f
2: fstore_1
3: getstatic #3; //Field java/lang/System.out:Ljava/io/PrintStream;
6: fload_1
7: ldc #4; //float 10.0f
9: fdiv
10: invokevirtual #5; //Method java/io/PrintStream.println:(F)V
13: ldc #2; //float 1.4f
15: fstore_2
16: getstatic #3; //Field java/lang/System.out:Ljava/io/PrintStream;
19: fload_2
20: ldc #4; //float 10.0f
22: fdiv
23: invokevirtual #5; //Method java/io/PrintStream.println:(F)V
26: return
}
Code:
[faetzminator@fkaros ~]$ javac -version
javac 1.6.0_26
[faetzminator@fkaros ~]$ javap -c Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
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: ldc #2; //float 1.4f
2: fstore_1
3: getstatic #3; //Field java/lang/System.out:Ljava/io/PrintStream;
6: fload_1
7: ldc #4; //float 10.0f
9: fdiv
10: invokevirtual #5; //Method java/io/PrintStream.printlnF)V
13: ldc #2; //float 1.4f
15: fstore_2
16: getstatic #3; //Field java/lang/System.out:Ljava/io/PrintStream;
19: fload_2
20: ldc #4; //float 10.0f
22: fdiv
23: invokevirtual #5; //Method java/io/PrintStream.printlnF)V
26: return
}
Also viele Dinge (z.B. diese Typenkonvertierung) aber auch Autoboxing und Unboxing (primitive -> wrapper, wrapper -> primitive) macht der Compiler (bei letzteren beiden werden z.B. Methodenaufrufe zu Integer.valueOf(...) und Integer.intValue() im Bytecode hinterlegt) gemacht. Andere Dinge macht erst die JVM.
Mich würde das auch mal interessieren, ob die Typkonvertierung zur Übersetzungszeit oder zur Laufzeit geschieht. Ein einfaches Ja bzw. Nein würde reichen