本節書摘來異步社群《java和android開發學習指南(第2版)》一書中的第2章,第2.7節,作者:【加】budi kurniawan,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
在處理不同的資料類型的時候,我們常常需要進行轉換。例如,将一個變量的值賦給另一個變量,就涉及轉換。如果兩個變量具有相同的類型,指派總是會成功。從一種類型到相同類型的轉換,叫作等同轉換(identity conversion)。例如,如下的轉換保證能夠成功:
從byte向short、int、long、float或double轉換。
從short向int、long、float或double轉換。
從char向int、long、float或double轉換。
從int向long、float或double轉換。
從float向double轉換。<code>`</code>
從一種整數類型向另一種整數類型的加寬轉換,不會有資訊丢失的風險。同樣的,從float向double的轉換也會保留所有的資訊。然而,從int或long向float的轉換,可能會導緻精度丢失。
加寬的基本類型轉換是隐式地發生的,不需要在代碼中做任何事情。例如:
從short向byte或char。
從char向byte或short。
從long向byte、short或char。
從float向byte、short、char、int或long。
從double向byte、short、char、int、long或float。<code>`</code>
和加寬基本類型轉換不同,收窄基本類型轉換必須是顯式的。需要在圓括号中指定目标類型。例如,如下是從long向int的收窄轉換。
long a = 9876543210l; <code>`</code>
int b = (int) a; // the value of b is now 1286608618
有可能導緻資訊丢失的收窄轉換,在你的程式中将會引入一個缺陷。