對於Java來說,數據類型分爲兩類:基本數據類型和引用數據類型。今天我要說得就是Java中的基本數據類型。
分類
對於基本數據類型的分類,我所知道的大概有兩種分法。
- 基本數據類型分爲三類:數值類型、字符類型和布爾類型。
- 基本數據類型分爲兩類:數值類型和布爾類型。
兩種分類的區別在於,第二種分類法將字符類型也看成了數值類型。理由在於,所有字符類型在內存中都是使用該字符對應的Unicode編碼表示,也就是從0-65535的整數表示。更爲關鍵的是,字符類型也可以進行算術運算。從這一點上看,將字符類型歸爲數值類型也有一定的道理。
當然,我更傾向於第一種觀點。不過,不管哪種分類,最後都會將基本數據類型再次分爲8種,也就是我們認知中的:byte、short、int、long、float、double、char、boolean。
介紹
- 整數類型
對於整數類型而言,分爲四種,分別爲:byte、short、int和long
對於這四種數據類型而言,區別在於所佔字節位數不同,其中byte佔8位,short佔16位,int佔32位,long佔64位。也正因爲所佔位數的不同,也導致各自所能表示位數的差異。所佔位數越大,所能表示的數值範圍也就越大。
在Java中,如果不顯式指定整數的數據類型,則默認被當做int類型進行處理。
對於整數來說,存在四種進制的表示方式:二進制、八進制、十進制和十六進制。我們日常認知中的整數是十進制的。但是在計算機中通常用二進制表示,但是爲了便於展示,有時候會將二進制轉換爲八進制或十六進制來進行展示。
在Java中隨便給定一個數字,該數字是用十進制進行表示。如果整數以0b或0B開頭,表示該整數用二進制進行表示,如:0B1101。如果整數以0開頭,表示該整數用八進制進行表示,如:0123。如果整數以0x或0X表示,表示該整數用十六進制進行表示,如:0X12a8。
自JDK1.7之後,允許在整數值間添加下劃線,如:123_456_789。
- 字符類型
對於字符類型來說,其通常被單引號進行包裹。在Java中,使用Unicode字符集來表示字符。
字符類型的值大概有三種表示方式:單引號包裹的單個字符,如:'a'、轉移字符表示的特殊字符如'\n'以及用Unicode表示法如'\u4e00'。
- 浮點類型
對於浮點類型而言,分爲兩種:float和double。其中,float爲單精度浮點數,而double表示雙精度浮點數。需要說明一點的是,在Java中,浮點數有固定的長度和表數範圍,其使用的是二進制科學計數法表示,因此浮點數的值是一個近似值而非精確值。
float和double區別在於所佔位數的不同,其中float佔32位,double佔64位。也正由於所佔位數的差異,從而導致了所能表示位數的差異。
在Java中,如果不顯式指定一個浮點數的類型,則默認爲double類型。需要說明一點的是,java爲浮點類型提供了三個特殊的浮點值:正無窮大、負無窮大和非數,用來表示溢出或出錯。
任何一個正浮點數除以0會得正無窮大,任何一個負浮點數除以0會得到負無窮大,0.0除以0會得到非數。當然,任何一個浮點數對0進行取餘也會得到一個非數。
需要說明的是,所有的正無窮大都相等,如:3.0 / 0和 5.6 / 0的結果相等。所有的負無窮大都相等,如:-1.2 / 0和 -9.8 / 0的結果相當。所有的非數都不相等,如:1.0 / 0和 1.0 / 0的結果不相等。
浮點數有兩種表示方式:十進制表示法如12.0和科學計數法1.2E1。
- 布爾類型
對於布爾類型而言,僅有boolean一種,其值也僅僅只有兩個:true和false。布爾類型常作爲循環、分支等結構的判斷條件。
默認值
對於基本數據類型而言,聲明爲成員變量或數組的時候,如果未顯式指定相關的值,則系統會進行默認賦值。
對於四種整數類型而言,系統默認賦值爲:0
對於兩種浮點數類型而言,系統默認賦值爲0.0
對於字符類型而言,系統默認賦值爲:‘’
對於布爾類型而言,系統默認賦值爲:false。
包裝類型
在Java中,針對這八種基本數據類型,提供了對應的包裝類型。對應關係如下:
byte: java.lang.Byte
short:java.lang.Short
int:java.lang.Integer
long: java.lang.Long
float:java.lang.Float
double:java.lang.Double
char:java.lang.Character
boolean:java.lang.Boolean.
包裝類型與基本類型區別如下:
- 包裝類型屬於引用類型,當聲明爲成員變量或數組時候,如果是基本數據類型,則根據類型的不同賦不同的值。但如果是引用數據類型,則賦值爲null。
- 包裝類型中定義了一些常用的方法,而基本數據類型則沒有。
當然,在大多數情況下,基本數據類型和其包裝類型可以互通有無,這是因爲自Java1.5之後提供了自動拆裝箱功能。所謂自動拆裝箱就是Java會幫你進行基本數據類型與其包裝類型的轉換。