簡體   English   中英

Java中的隱式類型轉換

[英]Implicit type casting in Java

我知道在Java中自動完成類型轉換,以獲得更高精度的低精度基本類型。 例如,在此代碼中:

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

我的問題是,內部實際發生了什么? 在第三個語句中, ij的值是否分別被float然后加在一起?

或者首先在int類型中添加,然后將添加的結果轉換為float

它們被添加為int(就像你在沒有賦值的情況下執行i+j ),然后由於賦值而轉換為float。

但是如果執行float k = (float) i + jj將被轉換為float,因為add的左側是float ...相同的float k = 1.0f*i + j

說得通?

讓我們來看看!

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

隱式轉換應用於表達式的某些部分,而是應用於整個計算的結果。

您可以通過一個簡單的示例演示:

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

上面給出零到c ,而不是0.5f ,如果將a float應用於a和/或b ,那將是結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM