Java中的隐式类型转换

时间:2017-02-20 13:56:26

标签: java casting

我知道在Java中自动完成类型转换,以获得更高精度的低精度基本类型。例如,在此代码中:

int i = 20;
int j = 40;
float k = i + j; //explicit casting not required

我的问题是,内部实际发生了什么?在第三个声明中,ij的值是否会单独转换为float然后再加在一起?

或者首先在int类型中添加,然后将添加结果投放到float

3 个答案:

答案 0 :(得分:4)

它们被添加为int(就像你在没有赋值时执行i+j那样),然后由于赋值而被转换为float。

但是,如果您执行了float k = (float) i + j,那么j会被转换为浮点数,因为加法的左侧是浮点数... float k = 1.0f*i + j

相同

有道理吗?

答案 1 :(得分:4)

我们来看看吧!

$ 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
}

如您所见,首先将它们添加为整数(指令8),然后将其转换为浮点数(指令9)。

答案 2 :(得分:3)

隐式转换应用于表达式的某些部分,而是应用于整个计算的结果。

您可以通过一个简单的示例来证明这一点:

int a = 1;
int b = 2;
float c = a / b;

以上为c而不是0.5f分配0,如果将float投射到a和/或{{1},则会产生结果}。