你的關注意義重大!
今天我們正式開始每日一題系列,最先開始的專題是 Java SE 專題,很多人可能覺得不以為然,Java 有什麼好準備的,人家不都是一言不合就架構運用、底層原理嗎?
我想說的是,萬變不離其宗,隻要學好基礎,就不愁學不會架構,很多自诩多年開發經驗的程式員可能隻是停留在各種架構的基本應用上,而對基礎知識一知半解。這樣長期下去,在職業生涯發展期間其實是很難精進的,這并不是危言聳聽!
今天的題目是:
Java 中哪些基本資料類型?它們在定義之處是否有初始值?
大家做個簡單的思考,然後我們開始今天的題目解答時間。

這個問題在很多人看來可能是個很基礎的題目,但是說實話我第一眼看到的時候并不能完全答對,隻能說個七七八八,也沒少被面試官嫌棄。
Java 中的基本資料類型
Java 提供了八種基本類型,可以大緻劃分為如下幾類:
- 6 種數字類型
- 4 種整數型
- 2 種浮點型
- 1 種字元類型
- 1 種布爾類型
具體内容是:
byte
- byte 的資料類型是 8 位、有符号、以二進制補碼表示的整數;
- 最小值是 -128(-2^7);
- 最大值是 127(2^7-1);
- 預設值是 0;
- byte 類型用在大型數組中可以節約空間,主要代替整數,因為 byte 變量占用的空間隻有 int 類型的四分之一;
short
- short 資料類型是 16 位、有符号的以二進制補碼表示的整數
- 最小值是 -32768(-2^15);
- 最大值是 32767(2^15 - 1);
- Short 資料類型也可以像 byte 那樣節省空間。一個short變量是int型變量所占空間的二分之一;
- 預設值是 0;
int
- int 資料類型是 32 位、有符号的以二進制補碼表示的整數;
- 最小值是 -2,147,483,648(-2^31);
- 最大值是 2,147,483,647(2^31 - 1);
- 一般地整型變量預設為 int 類型;
- 預設值是 0 ;
long
- long 資料類型是 64 位、有符号的以二進制補碼表示的整數;
- 最小值是 -9,223,372,036,854,775,808(-2^63);
- 最大值是 9,223,372,036,854,775,807(2^63 -1);
- 這種類型主要使用在需要比較大整數的系統上;
- 預設值是 0L;
float
- float 資料類型是單精度、32位、符合IEEE 754标準的浮點數;
- float 在儲存大型浮點數組的時候可節省記憶體空間;
- 預設值是 0.0f;
- 浮點數不能用來表示精确的值,如貨币;
double
- double 資料類型是雙精度、64 位、符合IEEE 754标準的浮點數;
- 浮點數的預設類型為double類型;
- double類型同樣不能表示精确的值,如貨币;
- 預設值是 0.0d;
boolean
- boolean資料類型表示一位的資訊;
- 隻有兩個取值:true 和 false;
- 這種類型隻作為一種标志來記錄 true/false 情況;
- 預設值是 false;
char
- char類型是一個單一的 16 位 Unicode 字元;
- 最小值是 \u0000( 0);
- 最大值是 \uffff(65,535);
- char 資料類型可以儲存任何字元;
此處大家要注意一下各個類型所對應的預設值,有的面試官可能不止會問到你有哪幾種資料類型,還會涉及到一些初始值的問題。
類型轉換
另外我們還需要注意一個特性:
整型、實型(常量)、字元型資料可以進行混合運算。在運算過程中,不同類型的資料會先轉化為同一類型,然後進行運算。
轉換又分為自動轉換和強制轉換,
自動轉換必須滿足轉換前的資料類型的位數要低于轉換後的資料類型,大緻轉換規則為低級到進階依次如下:
byte,short,char—> int —> long—> float —> double
複制
資料類型轉換必須滿足如下規則:
- 不能對 boolean 類型進行類型轉換;
- 不能把對象類型轉換成不相關類的對象;
- 在把容量大的類型轉換為容量小的類型時必須使用強制類型轉換;
- 轉換過程中可能導緻溢出或者損失精度(主要發生在強制轉換過程中,如 int 強制轉換比它位數短的 byte 之後就有可能會精度缺失);
- 浮點數到整數的轉換是通過舍棄小數得到,而不是四舍五入。
強制類型轉換也有亮點需要注意:
- 條件是轉換的資料類型必須是相容的;
- 格式:
是要強制類型轉換後的資料類型(type) value type
延伸題目
你了解過 Java 中的自動裝箱拆箱原理嗎?文檔!