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); // 正確,加括號保證優先級

int a = 100;
a *= 0.5;       // 正確,等價於a=(int)(a*0.5),直接進行強制轉換
byte b3 = 10;
b3++;         // 正確,等價於b3=(byte)(b3+10)

【注意】

  • 遵循自動提升原則,表達式的結果類型 遵循操作數中最大的類型
  • 強轉符號只針對於最近的操作數有效,往往需要通過小括號提升優先級
  • byte、short運算時充當int類型
  • char類型只能直接存儲int的常量值(char取值范圍內)不是變量值(大到小損失精度)
  • char 可以當做一種特殊的整數類型
  • java中整數類型默認的int類型;小數類型默認的double
  • int無法轉換為boolean
  • 小數類型轉為整數類型,小數可能被舍棄,所有出現精度損失,所以需要強制轉換
  • boolean 類型不能轉換成任何其它數據類型


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM