資料型別轉換存在的意義
資料型別轉換,在實際的應用開發中,常常會對不同型別的數字型別進行計算,所以就用到了資料轉換。一方面,使用算術計算符對數字進行運算時,系統在適當的時候回進行自動轉換;另一放方面,程式開發人員還可以強制進行資料轉換,這個操作有時候灰出現精度丟失等問題
資料轉換的依據:取決資料的取值範圍
byte -> short -> int ->long ->float ->double
char->
注意:
1.boolean 型別不能夠參與型別轉換
2.char 和byte/short 只有交集關係,沒有子集關係
1.自動型別轉換
將小型別的資料轉換為大型別的資料,系統會自動轉換
// 由於右邊int型別的數值正好在byte範圍之內,所以系統幫我們做了轉換
byte by2 = 127;
System.out.println(by2);
2.強制型別轉換
將大型別的資料轉換為小型別的資料,會編譯報錯
解決辦法:強制型別轉換
格式:
目標型別 變數名 =(目標型別) 被轉換的型別;
強制型別轉換會出現的問題:
1.精度的丟失
2.資料的溢位
3.byte/short特例
// 由於右邊int型別的數值正好在byte範圍之內,所以系統幫我們做了轉換
byte by2 = 127;
System.out.println(by2);
short s = 32767;
System.out.println(s);
4.byte/short和char 參與轉換,都需要強制型別轉換
//byte /short/char型別轉換比如強制轉換,因為他們在取值範圍只存在交集關係,不存在父子集關係。
byte by3 = 65;
char ch3 = (char)by3;
System.out.println(ch3);
char ch4 = '0';
byte by4 = (byte)ch4;
System.out.println(by4);
5.表示式型別提升
當表示式的運算子兩邊型別不一致的時候,結果的型別會自動向高型別轉換
// 當表示式的運算子兩邊型別不一致的時候,結果的型別會自動向高型別轉換
i5 = (int)(i5 + f3);
System.out.println(i5);
6.當byte short char 之間參與運算的時候,底層都會轉換為int 型別來計算
// 6.當byte short char 之間參與運算的時候,底層都會轉換成int型別來計算
byte by6 = 97;
short s2 = 1;
char ch6 = 'a';
short s3 = (short)(by6 + s2 + ch6);
System.out.println(s3);
7.boolean型別不能夠參與運算和轉換
// 7.boolean型別不能夠參與運算和轉換,但是在JavaScript中可以
boolean bool = true;
// int i6 = bool + 1;
// int i6 = (int)bool;
8.字串在參與運算中的轉換問題,字串相加是拼接操作
System.out.println(2 + 2 + "22" + 2 + 2); // 輸出結果為42222。 當字串與其他型別拼接以後就成為一個新的字串
9.變數計算和常量計算問題
變數相加,系統無法判斷具體的結果
//兩個不同型別的變數相加,通不過編譯器,
byte bbb2 = 10;
short sss2 = 20;
short ttt = bbb2 + sss2;
System.out.println(ttt);
//報錯誤程式碼
//需要強制標明型別
常量相加,在編譯時期,系統就會運算結果
//編譯器對常量進行了計算,然後int型別的30沒有超byte的範圍,實行了byte特列
byte b3 = 10 + 20;
System.out.println(b3);
//正確程式碼
本作品採用《CC 協議》,轉載必須註明作者和本文連結