Java之路:型別轉換
阿新 • • 發佈:2018-12-08
資料型別轉換
1、自動型別轉換
也稱隱式轉換,擴充套件轉換,將範圍小的資料型別賦值給範圍大的資料型別,編譯器會自動進行轉換。 例如:
byte b = 20;
int a = b; // 將byte型別賦值給int型別,編譯器會自動將byte型別轉化為Int型別
2、強制型別轉換
也稱顯式轉換,窄化轉換,將範圍大的資料型別賦值給範圍小的資料型別,也即將能容納更多資訊的資料型別轉換成無法容納那麼多資訊的型別,有可能面臨資訊丟失的危險。
double d = 200.12312;
int a = (int)d; // 將double型別賦值給int型別,必須進行顯式轉換
截尾和舍入
在執行窄化轉換時,必須注意截尾與舍入的問題。例如:如果將一個浮點數轉換為整型值,Java會如何處理呢?如果將29.7轉換為int,結果是30還是29?
public class Cast {
public static void main(String[] args) {
float f = 29.7f;
double d = 200.13213;
int i = (int)f;
System.out.println(i);
i = (int)d;
System.out.println(i);
}
}
【結果】
所以,在將float和double轉型為整型值時,總是對該數字執行截尾。如果想得到舍入的結果,就需要使用java.lang.Math
public class Cast {
public static void main(String[] args) {
float fabove = 0.7f, fbelow = 0.4f;
double dabove = 0.8, dbelow = 0.4;
System.out.println("fabove = " + Math.round(fabove));
System.out.println("fbelow = " + Math.round(fbelow));
System.out.println("dabove = " + Math. round(dabove));
System.out.println("dbelow = " + Math.round(dbelow));
}
}
【結果】
提升
如果對基本資料型別執行算術運算或按位運算,只要型別比int小(char、byte、short),那麼在運算之前,這些值都會自動轉換面int。
通常,表示式中出現最大的資料型別決定了表示式最終結果的資料型別,如:將一個float型別值與一個double值相乘,結果為double;將一個int值與一個long值相加,結果為long。