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

JavaSE中基本資料型別之間的轉換


各種資料型別按照資料範圍從小到大依次列出

byte -> short(char) -> int -> long ->float -> double


自動型別轉換

範圍大的資料型別 變數 = 範圍小的資料型別值;

比如

double d = 1000;
int i = 100;
double d2 = i;

強制型別轉換

(小數型別轉為整數型別,小數可能被捨棄,出現精度損失,所以需要強制轉換)

範圍小的資料型別值  變數 = (範圍小的資料型別值 ) 範圍大的資料型別 ;

int  i =(int)6.718;   //i的值為6

double d = 3.14;

int i2 = (int)d;     //i2的值為3

注意:布林型別Boolean不能參與型別轉換。

還有一點我們需要注意的是在進行強制轉換時要注意資料的溢位問題。

比如byte型別的範圍是-128~127

0000 0001代表的是數字1

1000 0000代表的就是-1

正數最大位0111 1111,也就是數字127

負數最大為1111 1111,也就是數字-128

byte佔8位,而int型別佔32位,當由int強制型別轉化為byte時,系統就採取了擷取int後8位的做法,

java中使用補碼的形式表示,補碼錶示的時候第一位是符號位,0正1負

那麼129在記憶體中的表示形式:00000000 00000000 00000000 10000001

這樣擷取後8位就變成10000001所以這個肯定是負數了,然後看它的數值部分0000001

補碼由正數變負數,還是負數變正數,方法: "按位取反,再加1

所以0000001應該變為1111110 + 1 = 1111111(即127)

又因為是負數,所以就擷取變成-127了

byte a=(byte) -129;
System.out.println(a);//輸出127
byte a1=(byte) 129; 
System.out.println(a1);//輸出-127

*面試陷阱

byte b1 = 10;
byte b2 = 11;
//錯誤: 不相容的型別: Java預設為int型別,這兩個數相加將會變成int型別,從int轉換到byte可能會損失精度,必須強制型別轉換
//否則,兩個運算元都將轉換為int型別。
byte b3 = b1 + b2 //錯誤
byte b3 = (byte)(b1 + b2); //正確

*面試陷阱2:

short s1 = 1; 
s1 = s1 + 1; //錯誤: 不相容的型別: 從int轉換到short可能會有損失,和上面的一樣。
short s2 = 1; 
s2 += 1; // 等同於short s2 = (short)(s2 + (short)1); //正確

其中char 還可以當做成一種特殊的整數型別

char c1 = 'a';
int i3 = c1; //自動轉換
int i4 = 100;
//char c2 = i4;// 錯誤: 不相容的型別: 從int轉換到char可能會損失精度
char a1=97;
System.out.println(a1);//輸出a,char型別表示的整數型別對應ASCII編碼表