數(shù)據(jù)類型
Java 基本類型共有八種,基本類型可以分為三類,字符類型 char,布爾類型 boolean 以及數(shù)值類型 byte、short、int、long、float、double。數(shù)值類型又可以分為整數(shù)類型 byte、short、int、long 和浮點(diǎn)數(shù)類型 float、double。JAVA 中的數(shù)值類型不存在無符號(hào)的,它們的取值范圍是固定的,不會(huì)隨著機(jī)器硬件環(huán)境或者操作系統(tǒng)的改變而改變。實(shí)際上,JAVA 中還存在另外一種基本類型 void,它也有對(duì)應(yīng)的包裝類 java.lang.Void,不過我們無法直接對(duì)它們進(jìn)行操作。8 種類型表示范圍如下:
- byte:8 位,最大存儲(chǔ)數(shù)據(jù)量是 255,存放的數(shù)據(jù)范圍是 - 128~127 之間。
- short:16 位,最大數(shù)據(jù)存儲(chǔ)量是 65536,數(shù)據(jù)范圍是 - 32768~32767 之間。
- int:32 位,最大數(shù)據(jù)存儲(chǔ)容量是 2 的 32 次方減 1,數(shù)據(jù)范圍是負(fù)的 2 的 31 次方到正的 2 的 31 次方減 1。
- long:64 位,最大數(shù)據(jù)存儲(chǔ)容量是 2 的 64 次方減 1,數(shù)據(jù)范圍為負(fù)的 2 的 63 次方到正的 2 的 63 次方減 1。
- float:32 位,數(shù)據(jù)范圍在 3.4e-45~1.4e38,直接賦值時(shí)必須在數(shù)字后加上 f 或 F。
- double:64 位,數(shù)據(jù)范圍在 4.9e-324~1.8e308,賦值時(shí)可以加 d 或 D 也可以不加。
- boolean:只有 true 和 false 兩個(gè)取值。
- char:16 位,存儲(chǔ) Unicode 碼,用單引號(hào)賦值。
Java 決定了每種簡(jiǎn)單類型的大小。這些大小并不隨著機(jī)器結(jié)構(gòu)的變化而變化。這種大小的不可更改正是 Java 程序具有很強(qiáng)移植能力的原因之一。下表列出了 Java 中定義的簡(jiǎn)單類型、占用二進(jìn)制位數(shù)及對(duì)應(yīng)的封裝器類。
對(duì)于數(shù)值類型的基本類型的取值范圍,我們無需強(qiáng)制去記憶,因?yàn)樗鼈兊闹刀家呀?jīng)以常量的形式定義在對(duì)應(yīng)的包裝類中了。如:
- 基本類型 byte 二進(jìn)制位數(shù):Byte.SIZE 最小值:Byte.MIN_VALUE 最大值:Byte.MAX_VALUE
- 基本類型 short 二進(jìn)制位數(shù):Short.SIZE 最小值:Short.MIN_VALUE 最大值:Short.MAX_VALUE
- 基本類型 char 二進(jìn)制位數(shù):Character.SIZE 最小值:Character.MIN_VALUE - 最大值:Character.MAX_VALUE
- 基本類型 double 二進(jìn)制位數(shù):Double.SIZE 最小值:Double.MIN_VALUE 最大值:Double.MAX_VALUE
注意:float、double 兩種類型的最小值與 Float.MIN_VALUE、 Double.MIN_VALUE 的值并不相同,實(shí)際上 Float.MIN_VALUE 和 Double.MIN_VALUE 分別指的是 float 和 double 類型所能表示的最小正數(shù)。也就是說存在這樣一種情況,0 到 ±Float.MIN_VALUE 之間的值 float 類型無法表示,0 到 ±Double.MIN_VALUE 之間的值 double 類型無法表示。這并沒有什么好奇怪的,因?yàn)檫@些范圍內(nèi)的數(shù)值超出了它們的精度范圍。 Float 和 Double 的最小值和最大值都是以科學(xué)記數(shù)法的形式輸出的,結(jié)尾的”E + 數(shù)字” 表示 E 之前的數(shù)字要乘以 10 的多少倍。比如 3.14E3 就是 3.14×1000=3140,3.14E-3 就是 3.14/1000=0.00314。 Java 基本類型存儲(chǔ)在棧中,因此它們的存取速度要快于存儲(chǔ)在堆中的對(duì)應(yīng)包裝類的實(shí)例對(duì)象。從 Java5.0(1.5)開始,JAVA 虛擬機(jī)(Java Virtual Machine)可以完成基本類型和它們對(duì)應(yīng)包裝類之間的自動(dòng)轉(zhuǎn)換。因此我們?cè)谫x值、參數(shù)傳遞以及數(shù)學(xué)運(yùn)算的時(shí)候像使用基本類型一樣使用它們的包裝類,但這并不意味著你可以通過基本類型調(diào)用它們的包裝類才具有的方法。另外,所有基本類型(包括 void)的包裝類都使用了 final 修飾,因此我們無法繼承它們擴(kuò)展新的類,也無法重寫它們的任何方法。 基本類型的優(yōu)勢(shì):數(shù)據(jù)存儲(chǔ)相對(duì)簡(jiǎn)單,運(yùn)算效率比較高 包裝類的優(yōu)勢(shì):有的容易,比如集合的元素必須是對(duì)象類型,滿足了 java 一切皆是對(duì)象的思想