[英]Implicit type casting in Java
我知道在Java中自動完成類型轉換,以獲得更高精度的低精度基本類型。 例如,在此代碼中:
int i = 20;
int j = 40;
float k = i + j; //explicit casting not required
我的問題是,內部實際發生了什么? 在第三個語句中, i
和j
的值是否分別被float
然后加在一起?
或者首先在int
類型中添加,然后將添加的結果轉換為float
?
它們被添加為int(就像你在沒有賦值的情況下執行i+j
),然后由於賦值而轉換為float。
但是如果執行float k = (float) i + j
則j
將被轉換為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.