????在程序運行時,經常需要將一種數值類型進行轉換成另一種類型。下面給出了一個合法的轉換。

? ??數值之間的合法轉換

????

? ? 上圖中有6個實心箭頭,表示無信息丟失的轉換,有三個虛箭頭,表示可能有精度丟失的轉換。例如123456789是一個大整數,它所包含的整數比float類型所能表達的位數要多,當把這個整數轉換為float時,將會得到通道大小的結果,但會丟失精度!

?int?a?=?123456789?;float?f?=?a?;f?=?1.23456792E8?;當使用上面兩個數值進行二元操作時(例如?a?+?f?,a?是整數,f是浮點數),先要將兩個操作數轉換為同一種類型,然后在進行計算!●?如果兩個操作數有一個是double類型,另一個操作數就會轉為double類型●?否則,如果其中一個操作數是float類型,另一個操作數將會轉為float類型?●?否則,如果其中一個操作數是long類型,另一個操作數將會轉為long類型●?否則,兩個操作數都會轉為int類型

????

? ?強制類型轉換

????在有的情況下,int類型的值將會自動的轉為double類型,但另一方面,有時候也需要將double轉為int類型。在java中,允許這種數值之間的轉換。當然,這樣會丟失一些信息。在這種情況下需要進行強制類型轉換(cast)實現這個操作,強制類型轉換的語法格式是在圓括號給出想要轉換的目標類型。后面緊跟待轉換的變量名。例如:

????double x = 9.91;

????int nx=(int)x;

????

????這樣,nx的值為9,強制類型轉換通過截斷小部分將浮點值轉為×××。

????如果想對浮點數進行四舍五入計算。以便得到最接近的整數。(在很多情況下,需要使用這種操作方式。),那就需要使用Math.round方法:

????double x = 9.91;

????int nx=(int)Math.round(x);

????現在,nx的值為10.當調用round的時候。仍然需要使用強制轉換(int)。其原因是round方法返回的結果是long類型,由于存在信息丟失的可能性。所以只有使用顯式的強制類型轉換才能將long類型轉換為int類型。

????