一張圖參悟萬惡的數據類型……

(此圖爲尚學堂馬士兵老師上課所講視頻截圖,謹向馬士兵老師致敬……)


學習Java或者.Net,其數據類型的重要性可想而知,沒有數據,何來程序……此爲Java的數據類型,與.Net的數據類型大致相同。記住此圖,便能初步掌握這幾種類型,做到心中大體有個概念,不至於寫程序時糊里糊塗。

注意:java和c#中的數據類型有些不同!如c#新增了sbyte帶符號的數據類型,其表示-128~127,而byte則表示正整數,範圍0~255。與java的byte定義還是不同的。對於兩種語言的數據類型有哪些不同之處,請上網查找即可。

瞭解了數據類型大體分類,其數據類型之間的相互轉化我覺得是基礎中的基礎,如若此本領沒有掌握,對於後續程序中類型的轉換會越來越糊塗……

數據類型間的相互轉換法則!!!(純屬個人總結……)

(1)表示範圍小的數能夠向表示範圍大的數轉換(表示範圍,即這個數據類型所能表示的數的範圍大小(學過計算機的應該知道什麼是範圍的大小吧)):byte,short,char->int->long->float->double。如double d1 = 123;  123爲int類型,向比它表示範圍大的double類型轉換,便可直接轉換而不會編譯錯誤。

(2)在這幾種數據類型中,整數默認爲int型,小數默認爲double型。

(3)byte,short,char在參與運算(即加減乘除)時,會自動先轉換爲int類型,然後再參與運算。如byte b1 = 1;byte b2 = 2;int a = b1+b2;(b1+b2在運算時會各自先轉換爲int類型,然後再相加,得出的結果也爲int類型)注意:byte b1 = 1;1爲 int類型,爲什麼能直接賦值給byte類型呢?此有個規定,即只要一個int類型的值不超過byte,short,char的表示範圍,其數值可以直接賦給byte,short,char型。byte b1 = 1+2;這個也是正確的!但如果byte a = 1;byte b = 2;byte b1 = a + b;這種是錯誤的!!!因爲a+b在運算時會自動轉換成int類型,必須要強制類型轉換!即byte b1 = (byte)a+b;(即直接賦常量可以,如若不然,則對不起,不可以!)

(注意:int i1 = 123; int i2 = 456; double d = (i1 + i2) * 1.0,當執行double d = (i1 + i2) * 1.0時,int類型的i1與i2會首先轉換成double類型,然後再相加,再與1.0相乘,切記自動類型轉換中執行的順序呢……親……

(4)關於強制類型轉換!byte b1 = (int)8888;int類型佔4個字節,而byte類型僅佔一個字節,在強制轉換時,8888會從左往右砍掉自己的3個字節,留下最右邊的那一個字節來表示b1。但注意!!!!如果float f1 = (float)1e200;double表示的數的範圍遠超float,這樣強制轉換會報錯!因爲double含有小數點,計算機無法自動地砍掉double類型數據中超的部分而轉換給float。所以這種是錯誤的!(即double是不能強制轉換成float)

這在一定程度上也解釋了上述的爲何int可以轉換成byte,因爲計算機會直接砍掉int超出的那三個字節,但鑑於double無法直接砍掉多的部分轉換成float,所以double不能強制轉換成float(注意,上述講double不能強制轉換成float是特指double類型的數表數範圍超過float表數範圍時的強制轉換,若double類型的數沒有超過float表數範圍,則double是可以向float強制轉換的,切記!)

注意:可以將float類型直接轉換成long類型,即將float類型的小數部分砍去,留下的整數部分轉換成long類型

補充知識點:

1)C#語言中數據類型char佔用兩個字節。在java中可以直接char c2 = 123;在顯示char的值時會自動把123轉換成相應的ASCII碼對應的符號。但在C#中則不能直接這樣寫:char c2 = 123;

2)char c = '\u0061';這種寫法實際是Unicode編碼的寫法,即\u就表示後面的4位數(0061)均採用16進制的方式顯示。打印出c的值時,也是會把16進制的數0061轉換成相對應的ASCII所對應的字符號。

注意:char c = '\u0061';只能在\u後寫四個數字,不能寫少於四個的數字,如char c='\u061';這樣是不行的,因爲char本來佔用兩個字節即共16個bit,而16進制每個數佔4個bit,所以剛好\u後4個16進制才能滿足16位。所以\u後只能寫4個16進制。

如果想徹底搞明白數據類型,請自行下載馬士兵老師的java基礎視頻看看,講的我認爲是最深入最直觀的最詳細的……


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