Java基本資料型別之間轉換
阿新 • • 發佈:2019-07-10
一、自動型別轉換
轉換的過程自動發生
規則:小——>大
byte->short->int->long->float->double
char型別識別為int,可以轉成int,不可自動轉成byte、short
二、強制型別轉換
轉換的過程強制發生
規則:大——>小
語法:型別 變數名 = (型別)值;
int i = 10; short s = 5; i = s; // 正確,自動轉換 s = i; // 報錯,精度丟失,需要強制轉換 long l3 = 1000.9f; // 報錯,小數轉為整數,精度丟失,需要強制轉換 double d = 1.5f; // 正確,1.5f識別為float型別,自動轉換 float f1 = 100L; // 正確,整數部分可以直接賦值給float整數部分,自動轉換 float f2 = 100.9; // 報錯,100.9預設識別為double,這樣轉換可能失去小數點,必須強制轉換 short s1 = 5; s1 = s1 - 2; // 報錯,2被識別為int,損失精度 byte b = 2; s1 = s1 - b; // 報錯,char、byte和short運算、比較時以int儲存(為了保證不發生溢位現象),賦值損失精度 b = b + 4; // 同理,報錯 //沒報錯的原因: //編譯時候,進行檢查,看賦值大小是否超過變數的型別所容納的範圍 //如果超過,報錯:從int轉換到byte可能會有損失,如果沒超過,編譯通過 byte b1 = 120; byte b2 = 128; // 報錯,超過儲存範圍 char c1 = 'a'; int i1 = c1; // 正確,自動轉換 int i2 = 100; char c2 = i2; // 錯誤: 不相容的型別: 從int轉換到char可能會有損失 int n = 100; char c3 = (char)n; // 正確,強制轉換 int m = 12.5*8+2.5*4; // 錯誤,float到int損失精度 int m2 = (int)(12.5*8+2.5*4); // 正確,加括號保證優先順序
【注意】
- 遵循自動提升原則,表示式的結果型別 遵循運算元中最大的型別
- 強轉符號只針對於最近的運算元有效,往往需要通過小括號提升優先順序
- byte、short運算時充當int型別
- char型別只能直接儲存int的常量值(char取值範圍內)不是變數值(大到小損失精度)
- char 可以當做一種特殊的整數型別
- java中整數型別預設的int型別;小數型別預設的double
- int無法轉換為boolean
- 小數型別轉為整數型別,小數可能被捨棄,所有出現精度損失,所以需要強制轉換
- boolean 型別不能轉換成任何其它資料型別