在Java中共有8中基本類型數據,同時每種基本類型又有對應的包裝類
基本類型
Java共有8種基本數據類型,它們分別如下表所示:
基本數據類型 | 類型 | 所佔字節 |
---|---|---|
byte | 數值型 | 1字節 |
short | 數值型 | 2字節 |
int | 數值型 | 4字節 |
long | 數值型 | 8字節 |
float | 數值型 | 4字節 |
double | 數值型 | 8字節 |
char | 字符型 | 2字節 |
boolean | 布爾型 |
基本類型的佔用空間大小
- byte(字節)用無符號的8位表示,它的取值範圍是[-2^7, 2^7-1]。它是最小的整型類型,通常用於網絡傳輸、文件或者其他I/O數據流。默認值是0。
- short(短整型)用有符號的16位表示,它的取值範圍是[-2^15, 2^15-1]。從日常的觀察來看,short類型可能是最不常用的類型了。完全可以用int來替代它,因爲我們通常不需要過多地擔心內存容量問題。默認值是0。
- int(整型)用有符號的32位表示,它的取值範圍是[-2^31, 2^31-1],計算機中用存放的是整型數值的二進制補碼。默認值是0。
- long(長整型)用有符號的64位表示,它的取值範圍是[-2^63, 2^63-1]。它的字面量表示以l或者L結束,如 long a = 45454L。默認值是0L。
- float(單精度浮點型)用32位表示,遵循IEEE 754規範。如果數值精度要求不高時,可以使用這種類型。float類型字面量值通常以f或者F結束。由於整型可以自動轉換爲float類型,所以,我們也可以將整型字面量值直接賦予float類型變量。默認值是0F。
- double(雙精度浮點型)用64位表示,遵循IEEE 754規範。它能表示比float更高精度的數值。double是Java基本類型中能達到的最高精度,如果還不能滿足要求,可以使用Java中的BigDecimal類。默認值是0.0。
- char(字符)用無符號的16位表示,它的取值範圍是[0, 2^16-1]。Java中使用Unicode字符集來表示字符,Unicode將人類語言的所有已知字符映射成16位數字,所以Java中的char是16位的。默認值是\u00000。
- boolean( 布爾型)只要true和false兩個字面量值,可用於邏輯判斷。boolean只能表示1位的信息量,但是它的大小並沒有精確地定義。
類型轉換
Java中除了boolean類型之外,其他7中類型相互之間可以進行轉換。轉換分爲自動轉換和強制轉換。對於自動轉換(隱式),無需任何操作,而強制類型轉換需要顯式轉換,即使用轉換操作符(type)。7種類型按照其佔用空間大小進行排序:
byte <(short=char)< int < long < float < double
類型轉換的總則是:小可直接轉大、大轉小會失去精度。
包裝類
Java中每一種基本類型都會對應一個唯一的包裝類,基本類型與其包裝類都可以通過包裝類中的靜態或者成員方法進行轉換。每種基本類型及其包裝類的對應關係如下,值得注意的是,所有的包裝類都是final修飾的,也就是它們都是無法被繼承和重寫的。
基本數據類型 | 包裝類 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
拆箱與裝箱
裝箱:將基本類型轉換成包裝類的過程
拆箱:將包裝類轉換成基本類型的過程
在jdk1.5之後提供了自動拆裝箱
區別
- 基本類型是直接用來存儲值的,放在棧中方便快速使用,包裝類型是類,其實例是對象,放在堆中
- 基本類型不是對象,因此沒有方法,包裝類型是類,因此有方法
- 基本類型直接賦值即可,包裝類型需要使用new關鍵字創建
- 包裝類型初始值爲null,基本類型初始值不爲null,是根據類型而定的
包裝類型將基本類型的值包裝在對象中,這樣就可以使用對象的方法操作基本類型,類型之間的轉換需要使用包裝類型的方法才能完成,因此需要有包裝類型。
public static void main(String[] args) {
Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200;
System.out.println(i1==i2); //①true
System.out.println(i3==i4); //②false
}
①處結果爲true,②處爲false
Integer i1 = 100;執行的操作是100先通過valueOf()方法進行裝箱操作,Integer.valueOf()的源碼如下:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
Integer比較特殊,在-128到127之間,會走緩存,不在這個區間的數會走new Integer(i),也就是會創建新的對象,因此,100比較的時候是true,200比較的時候是false
基本類型和字符串之間的轉換
在程序開發中,我們經常需要在基本數據類型和字符串之間進行轉換。
基本類型轉換爲字符串有三種方法:
- 使用包裝類的 toString() 方法 Integer.toString(10)
- 使用String類的 valueOf() 方法 String.valueOf(10)
- 用一個空字符串加上基本類型,得到的就是基本類型數據對應的字符串 10 + ""
將字符串轉換成基本類型有兩種方法:
- 調用包裝類的 parseXxx 靜態方法 Integer.parseInt("10");
- 調用包裝類的 valueOf() 方法轉換爲基本類型的包裝類,會自動拆箱 Integer.valueOf("10");