Java 中的隐式类型转换

Ayu*_*eth 2 java casting

我知道类型转换是在 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?

And*_*gia 5

让我们来看看!

$ 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)。