Java之間的數值轉換如圖所示,實心箭頭代表無數據丟失,虛線箭頭代表可能丟失
例如:123456789是一個大的整數,包含的位數比float類型能夠表達的位數多,但這個數轉換為float類型時,將會得到同樣大小的結果,但卻失去了一定的精度。
int n = 123456789;
float f =n; //f is 1.23456792E8
當轉換前后兩個數進行二元操作時(例如n+f,n為整數,f為浮點數),則先將兩個操作數轉換為同一個類型,再進行計算。
轉換規則:
--如果兩個操作數中有一個是double類型,另一個操作數就會轉換為double類型。
--否則,如果其中一個操作數是float類型時,另一個操作數將會轉換為float類型。
--否則,如果其中一個操作數是long類型時,另一個操作數將會轉換為long類型。
--否則,兩個操作數都將會被轉換為int類型。
強制轉換類型
在Java中允許進行像int轉換為double類型或者double轉換為int,但有可能丟失一些信息。如像強制轉換類型,則需要通過強制類型轉換(cast)實現。強制類型轉換的語法格式是在圓括號中給出想要轉換的目標類型,后面緊跟待轉換的變量名
例如
double x = 9.887;
int nx = (int)x;
變量nx的值為9。強制類型轉換通過截斷小數將浮點值轉換為整型。
如果想將浮點數進行舍入運算,以得到最接近的整數,就需要使用Math.round方法:
double x = 9.887;
int nx = (int)Math.round(x);
現在變量nx的值為10.調用round的時候仍然需要使用強制類型轉換(int)。原因為:round方法返回結果為long類型,由於存在信息丟失可能性,所以只有使用顯式的強制類型轉換才能夠將long類型轉換為int類型。