Java數據類型轉換之謎探索

Java基本數據類型有四類八種:

整數型 小數型 字符型 布爾型
byte、 short、 int、 long float 、double char boolean

數據類型的轉換主要有以下規則:

1.小的數據類型會自動轉爲大的數據類型,反之需要強制類型轉換。
在這裏插入圖片描述
2.所有字面值是整數的默認是int類型。

將2147483648賦值給long類型,報錯:Integer number too large,明明沒有超過long表示的範圍:

long i=2147483648;//Integer number too large;

解釋:如果要將一個整數賦值給long類型,需要在賦值的數字後加L/l指明是long類型。

long i=2147483648L;//ok;

再看下面:

byte b=127;//ok;

不是說好字面值是整數的默認是int類型嗎,爲什麼這裏的數字賦值給byte類型不會報錯?

解釋:因爲java在編譯時期會進行判斷,如果你賦值的數值沒有超過byte、short的最大範圍,則編譯不會報錯。這裏的127沒有超過byte的最大表示範圍。

byte b=128;//Required byte,Found int;

3.所有字面值是小數的默認是double類型。

float f=2.7;//Required flout,Found double;

解釋:如果要將一個小數賦值給float類型,需要在賦值的小數後加F/f指明是float類型:

float f=2.7F;//ok;

4.java中的char類型本質上是整數,範圍是0~65535。

因爲計算機無法存儲真正的字符,它只認數字。所以需要將字符按照一定的編碼規則轉換成數字存儲。

char c='a';//ok
char i=65535;//ok

但是:

short s=2;
char i=s;///Required char,Found short;

不是說好char可以直接存儲數字嗎?爲什麼將變量類型爲short類型的數值賦值給char會報錯呢?

解釋: 關鍵是char沒有負數,你賦值的是變量,人家也保證不了你不給負數,所以乾脆不讓你這麼幹了。

5.兩個不同整數類型進行計算,會將小的那一個數據類型提升爲大的一方,再進行計算

short s1=777;
int  i2=66;
short total=s1+i2;//Error:不兼容的類型: 從int轉換到short可能會有損失

s1會自動提升爲int,然後再進行計算,兩個int計算的結果爲int ,這時賦值給short當然報錯了。那爲什麼兩個不同整數類型進行計算,會將小的那一個數據類型提升爲大的一方?

解釋: java中,數值運算不是口算,計算機的世界就是0和1表示的二進制,這裏的short 和 int 類型的兩個數字需要轉換成二進制的補碼進行計算,但是問題來了,short類型佔2個字節,int 佔4個字節,驢脣不對馬嘴,計算機沒法玩了,只能把short轉成int再計算。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章