Java 基本數(shù)據(jù)類(lèi)型
前面我們學(xué)習(xí)了變量,每個(gè)變量都是有數(shù)據(jù)類(lèi)型的。在 Java 中,一共有兩大數(shù)據(jù)類(lèi)型:
- 基本數(shù)據(jù)類(lèi)型(內(nèi)置數(shù)據(jù)類(lèi)型)
- 引用數(shù)據(jù)類(lèi)型
本小節(jié),我們將主要介紹基本數(shù)據(jù)類(lèi)型,除了我們?cè)谑纠薪?jīng)常用到的 int
類(lèi)型外,Java
語(yǔ)言還有其他 7
種基本數(shù)據(jù)類(lèi)型。它們由語(yǔ)言預(yù)先定義,也稱內(nèi)置數(shù)據(jù)類(lèi)型,顧名思義,它們是 Java
語(yǔ)言中最基本的數(shù)據(jù)類(lèi)型。另外注意:引用數(shù)據(jù)類(lèi)型并不屬于基本數(shù)據(jù)類(lèi)型的范疇,我們將在后面講解。
Java 語(yǔ)言支持 8 種基本數(shù)據(jù)類(lèi)型:byte
,short
,int
,long
,float
,double
,char
和 boolean
1. 分類(lèi)和特點(diǎn)
1.1 分類(lèi)
基本數(shù)據(jù)類(lèi)型定義在 Java
類(lèi)型系統(tǒng)中,在類(lèi)型系統(tǒng)中,又可將基本類(lèi)型分為三大類(lèi):
- 數(shù)字型:包含
short
、int
、long
、float
和double
,只能存儲(chǔ)數(shù)字?jǐn)?shù)據(jù); - 字符型:
byte
和char
,只能存儲(chǔ)字符數(shù)據(jù); - 布爾類(lèi)型:
boolean
,只能存儲(chǔ)true
(真) 或false
(假)。
1.2 范圍和默認(rèn)值
基本類(lèi)型都有固定的大小,因此,基本類(lèi)型的值會(huì)被限制在一個(gè)范圍內(nèi)。
另外,在聲明變量時(shí),不一定總是需要分配值。編譯器會(huì)將已聲明但未初始化的字段設(shè)置合理的默認(rèn)值。但是,建議為每個(gè)變量都賦初始值,這是很好的編程習(xí)慣。
具體的范圍和默認(rèn)值,請(qǐng)參考下表:
類(lèi)型 | 大?。ㄎ唬?/th> | 最小值 | 最大值 | 默認(rèn)值 |
---|---|---|---|---|
byte | 8 | -128 | +127 | 0 |
char | 16 | 0 | +655,35 | ‘\u0000’ |
short | 16 | -32,768 | +32,767 | 0 |
int | 32 | -2,147,483,648 | +2,147,483,647 | 0 |
long | 64 | -9,223,372,036,854,775,808 | +9,223,372,036,854,775,807 | 0L |
float | 32 | 1.4 E-45 | 3.402,823,5 E+38 | 0.0f |
double | 64 | 4.9 E-324 | 1.797,693,134,862,315,7 E+308 | 0.0d |
boolean | – | – | – | false |
1.3 常見(jiàn)錯(cuò)誤
在編碼過(guò)程中,要特別注意變量不要超出其類(lèi)型的范圍,請(qǐng)查看如下示例:
public class MemoryOverflow {
public static void main(String[] args) {
// Integer.MAX_VALUE 用來(lái)int類(lèi)型能存儲(chǔ)的最大值
int maximumValue = Integer.MAX_VALUE;
System.out.println("int類(lèi)型能夠存儲(chǔ)的最大值為:" + maximumValue);
System.out.println(maximumValue + 1);
}
}
運(yùn)行結(jié)果:
int 類(lèi)型能夠存儲(chǔ)的最大值為2147483647
-2147483648
我們發(fā)現(xiàn) int
類(lèi)型能存儲(chǔ)的最大值加 1 之后,變成了一個(gè)負(fù)數(shù),這個(gè)數(shù)其實(shí)就是 int
類(lèi)型能夠存放的最小值,這是因?yàn)榧?1 之后變量超出了 int
類(lèi)型能夠存儲(chǔ)的最大值,這就是我們常常說(shuō)的內(nèi)存溢出錯(cuò)誤。
還要特別注意一點(diǎn),由于 Java 是強(qiáng)類(lèi)型的,每個(gè)變量都有一個(gè)類(lèi)型,只有給定種類(lèi)的值能夠存儲(chǔ)到該變量中。例如,不能將浮點(diǎn)型的數(shù)字賦值給整型變量:
public class IncompatibleTypeError{
public static void main(String[] args) {
int age;
age = 20.5f;
}
}
源代碼在編譯階段就會(huì)報(bào)錯(cuò):
$ javac IncompatibleTypeError.java
IncompatibleTypeError.java:4: 錯(cuò)誤: 不兼容的類(lèi)型: 從float轉(zhuǎn)換到int可能會(huì)有損失
age = 20.5f;
^
1 個(gè)錯(cuò)誤
2. 整型
整型就是整數(shù)類(lèi)型,和數(shù)學(xué)中的整數(shù)意義相同,例如:
// 聲明一個(gè)整型變量age
int age = 10;
// 聲明一個(gè)整型變量 score
int score = 100;
整型除了 int
類(lèi)型,還有 short
和 long
類(lèi)型,也就是短整型和長(zhǎng)整型,他們用于存放不同范圍的整數(shù)值。需要注意的是,long
類(lèi)型的值后面要以大寫(xiě)字母 L
或小寫(xiě)字母 l
結(jié)尾。請(qǐng)閱讀以下代碼:
// 聲明一個(gè)短整型變量a
short a = 20;
// 聲明一個(gè)長(zhǎng)整型變量b
long b = 100l;
// 聲明一個(gè)長(zhǎng)整型變量c
long c = 100L;
Tips:對(duì)于長(zhǎng)整型,推薦后面總以大寫(xiě)字母
L
結(jié)尾,因?yàn)樾?xiě)字母l
與數(shù)字1
容易混淆。
和數(shù)學(xué)一樣,計(jì)算機(jī)中的整型也有進(jìn)制的概念,Java
可以通過(guò)以下幾種進(jìn)制系統(tǒng)表示:
- 十進(jìn)制:基數(shù)為 10,由 0 到 9 組成; 這是我們?nèi)粘I钪惺褂玫臄?shù)字系統(tǒng);
- 十六進(jìn)制:基數(shù)為 16,由數(shù)字 0 到 9 和字母 A 到 F 組成;
- 二進(jìn)制:基數(shù)為 2,由數(shù)字 0 和 1 組成。
在 Java
中,十六進(jìn)制和二進(jìn)制需要以前綴區(qū)分,前綴 0x
表示十六進(jìn)制,前綴 0b
表示二進(jìn)制,我們來(lái)看一個(gè)示例:
// 十進(jìn)制表示數(shù)字10
int decimalValue = 10;
// 十六進(jìn)制表示數(shù)字10
int hexadecimalValue = 0xA;
// 二進(jìn)制表示數(shù)字10
int binaryValue = 0b1010;
3. 浮點(diǎn)型
浮點(diǎn)類(lèi)型就是數(shù)學(xué)中的小數(shù),在 Java 中,浮點(diǎn)型又可分為單精度浮點(diǎn)型 (float
) 和雙精度浮點(diǎn)型 (double
)。需要注意的是,float
類(lèi)型的值必須要以大寫(xiě)字母 F
或小寫(xiě)字母 f
結(jié)尾,我們來(lái)看一個(gè)示例:
float f1 = 1.2f;
float f2 = 10.56F;
double
類(lèi)型的值可以以字母 D
或 d
結(jié)尾,但不做強(qiáng)制:
// 聲明三個(gè)double類(lèi)型變量,其值都為123.3
double d1 = 123.3;
double d2 = 123.3D;
double d3 = 123.3d;
另外浮點(diǎn)類(lèi)型也可以使用字母 E
或 e
,后面跟上次方的數(shù)值,來(lái)表示數(shù)學(xué)中的科學(xué)計(jì)數(shù)法,我們來(lái)看一個(gè)示例:
// 科學(xué)計(jì)數(shù)法表示的 123.4
double d2 = 1.234e2;
float f1 = 1.234e2f;
// 科學(xué)計(jì)數(shù)法表示 200022.1
double d3 = 2.000221e5
4. 布爾類(lèi)型
布爾類(lèi)型 boolean
只有兩個(gè)可能的值:true
和 false
,它是用于跟蹤判斷條件真假的標(biāo)志。
boolean b1 = true;
boolean b2 = false;
我們將在后面學(xué)習(xí)條件語(yǔ)句的時(shí)候經(jīng)常使用。這時(shí)布爾類(lèi)型才能發(fā)揮它真正的價(jià)值,這里不再贅述。
5. 字符類(lèi)型
字符類(lèi)型 char
表示一個(gè)字符。Java 中的 char
類(lèi)型除了可表示標(biāo)準(zhǔn)的 ASCII
外,還可以表示一個(gè) Unicode
字符:
public class CharType {
public static void main(String[] args) {
// 存放一個(gè) ASCII 碼
char a = 97;
// 存放一個(gè)Unicode字符
char zh = '慕';
System.out.println(a);
System.out.println(zh);
}
}
運(yùn)行結(jié)果:
a
慕
Java 語(yǔ)言還為 char
和 String
類(lèi)型(String 類(lèi)型將在后面單獨(dú)講解),支持一些特殊的轉(zhuǎn)義序列:
符號(hào) | 代表字符 |
---|---|
\ n | 換行(0x0a) |
\ r | 回車(chē)(0x0d) |
\F | 換頁(yè)(0x0c) |
\ b | 退格(0x08) |
\ s | 空格(0x20) |
\ t | 制表符 |
" | 雙引號(hào) |
’ | 單引號(hào) |
\\ | 反斜杠 |
\ddd | 八進(jìn)制字符(ddd) |
\ uxxxx | 十六進(jìn)制 Unicode 字符(xxxx) |
6. 小結(jié)
學(xué)完了本小節(jié),我們來(lái)回顧一下,Java 提供兩大類(lèi)型:基本數(shù)據(jù)類(lèi)型和引用數(shù)據(jù)類(lèi)型。一共有 8 種基本數(shù)據(jù)類(lèi)型?;绢?lèi)型又可分為數(shù)字型(整型和浮點(diǎn)型),字符型以及布爾型。在編碼時(shí)要注意,為變量所賦的值不要超出其類(lèi)型的范圍。