1. 程式人生 > >Java基本資料型別之間轉換

Java基本資料型別之間轉換

一、自動型別轉換

轉換的過程自動發生
規則:小——>大
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 型別不能轉換成任何其它資料型別