我知道类型转换是在 Java 中自动完成的,用于将较低精度的原始类型转换为较高的精度。例如在这段代码中:
int i = 20;
int j = 40;
float k = i + j; //explicit casting not required
Run Code Online (Sandbox Code Playgroud)
我的问题是,内部实际发生了什么?在第三个语句中,i和的值是否j分别被转换为float然后相加?
还是先在inttype 中进行加法,然后将加法的结果转换为float?
让我们来看看!
$ cat > temp.java
class temp {
public void f() {
int i = 20;
int j = 40;
float k = i + j; //explicit casting not required
}
}
$ javac temp.java
$ javap -c temp
Compiled from "temp.java"
class temp {
temp();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public void f();
Code:
0: bipush 20
2: istore_1
3: bipush 40
5: istore_2
6: iload_1
7: iload_2
8: iadd
9: i2f
10: fstore_3
11: return
}
Run Code Online (Sandbox Code Playgroud)
如您所见,首先将它们添加为整数(指令 8),然后转换为浮点数(指令 9)。