Java 基本數據類型
前面我們學習了變量,每個變量都是有數據類型的。在 Java 中,一共有兩大數據類型:
- 基本數據類型(內置數據類型)
- 引用數據類型
本小節,我們將主要介紹基本數據類型,除了我們在示例中經常用到的 int
類型外,Java
語言還有其他 7
種基本數據類型。它們由語言預先定義,也稱內置數據類型,顧名思義,它們是 Java
語言中最基本的數據類型。另外注意:引用數據類型并不屬于基本數據類型的范疇,我們將在后面講解。
Java 語言支持 8 種基本數據類型:byte
,short
,int
,long
,float
,double
,char
和 boolean
1. 分類和特點
1.1 分類
基本數據類型定義在 Java
類型系統中,在類型系統中,又可將基本類型分為三大類:
- 數字型:包含
short
、int
、long
、float
和double
,只能存儲數字數據; - 字符型:
byte
和char
,只能存儲字符數據; - 布爾類型:
boolean
,只能存儲true
(真) 或false
(假)。
1.2 范圍和默認值
基本類型都有固定的大小,因此,基本類型的值會被限制在一個范圍內。
另外,在聲明變量時,不一定總是需要分配值。編譯器會將已聲明但未初始化的字段設置合理的默認值。但是,建議為每個變量都賦初始值,這是很好的編程習慣。
具體的范圍和默認值,請參考下表:
類型 | 大小(位) | 最小值 | 最大值 | 默認值 |
---|---|---|---|---|
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 常見錯誤
在編碼過程中,要特別注意變量不要超出其類型的范圍,請查看如下示例:
public class MemoryOverflow {
public static void main(String[] args) {
// Integer.MAX_VALUE 用來int類型能存儲的最大值
int maximumValue = Integer.MAX_VALUE;
System.out.println("int類型能夠存儲的最大值為:" + maximumValue);
System.out.println(maximumValue + 1);
}
}
運行結果:
int 類型能夠存儲的最大值為2147483647
-2147483648
我們發現 int
類型能存儲的最大值加 1 之后,變成了一個負數,這個數其實就是 int
類型能夠存放的最小值,這是因為加 1 之后變量超出了 int
類型能夠存儲的最大值,這就是我們常常說的內存溢出錯誤。
還要特別注意一點,由于 Java 是強類型的,每個變量都有一個類型,只有給定種類的值能夠存儲到該變量中。例如,不能將浮點型的數字賦值給整型變量:
public class IncompatibleTypeError{
public static void main(String[] args) {
int age;
age = 20.5f;
}
}
源代碼在編譯階段就會報錯:
$ javac IncompatibleTypeError.java
IncompatibleTypeError.java:4: 錯誤: 不兼容的類型: 從float轉換到int可能會有損失
age = 20.5f;
^
1 個錯誤
2. 整型
整型就是整數類型,和數學中的整數意義相同,例如:
// 聲明一個整型變量age
int age = 10;
// 聲明一個整型變量 score
int score = 100;
整型除了 int
類型,還有 short
和 long
類型,也就是短整型和長整型,他們用于存放不同范圍的整數值。需要注意的是,long
類型的值后面要以大寫字母 L
或小寫字母 l
結尾。請閱讀以下代碼:
// 聲明一個短整型變量a
short a = 20;
// 聲明一個長整型變量b
long b = 100l;
// 聲明一個長整型變量c
long c = 100L;
Tips:對于長整型,推薦后面總以大寫字母
L
結尾,因為小寫字母l
與數字1
容易混淆。
和數學一樣,計算機中的整型也有進制的概念,Java
可以通過以下幾種進制系統表示:
- 十進制:基數為 10,由 0 到 9 組成; 這是我們日常生活中使用的數字系統;
- 十六進制:基數為 16,由數字 0 到 9 和字母 A 到 F 組成;
- 二進制:基數為 2,由數字 0 和 1 組成。
在 Java
中,十六進制和二進制需要以前綴區分,前綴 0x
表示十六進制,前綴 0b
表示二進制,我們來看一個示例:
// 十進制表示數字10
int decimalValue = 10;
// 十六進制表示數字10
int hexadecimalValue = 0xA;
// 二進制表示數字10
int binaryValue = 0b1010;
3. 浮點型
浮點類型就是數學中的小數,在 Java 中,浮點型又可分為單精度浮點型 (float
) 和雙精度浮點型 (double
)。需要注意的是,float
類型的值必須要以大寫字母 F
或小寫字母 f
結尾,我們來看一個示例:
float f1 = 1.2f;
float f2 = 10.56F;
double
類型的值可以以字母 D
或 d
結尾,但不做強制:
// 聲明三個double類型變量,其值都為123.3
double d1 = 123.3;
double d2 = 123.3D;
double d3 = 123.3d;
另外浮點類型也可以使用字母 E
或 e
,后面跟上次方的數值,來表示數學中的科學計數法,我們來看一個示例:
// 科學計數法表示的 123.4
double d2 = 1.234e2;
float f1 = 1.234e2f;
// 科學計數法表示 200022.1
double d3 = 2.000221e5
4. 布爾類型
布爾類型 boolean
只有兩個可能的值:true
和 false
,它是用于跟蹤判斷條件真假的標志。
boolean b1 = true;
boolean b2 = false;
我們將在后面學習條件語句的時候經常使用。這時布爾類型才能發揮它真正的價值,這里不再贅述。
5. 字符類型
字符類型 char
表示一個字符。Java 中的 char
類型除了可表示標準的 ASCII
外,還可以表示一個 Unicode
字符:
public class CharType {
public static void main(String[] args) {
// 存放一個 ASCII 碼
char a = 97;
// 存放一個Unicode字符
char zh = '慕';
System.out.println(a);
System.out.println(zh);
}
}
運行結果:
a
慕
Java 語言還為 char
和 String
類型(String 類型將在后面單獨講解),支持一些特殊的轉義序列:
符號 | 代表字符 |
---|---|
\ n | 換行(0x0a) |
\ r | 回車(0x0d) |
\F | 換頁(0x0c) |
\ b | 退格(0x08) |
\ s | 空格(0x20) |
\ t | 制表符 |
" | 雙引號 |
’ | 單引號 |
\\ | 反斜杠 |
\ddd | 八進制字符(ddd) |
\ uxxxx | 十六進制 Unicode 字符(xxxx) |
6. 小結
學完了本小節,我們來回顧一下,Java 提供兩大類型:基本數據類型和引用數據類型。一共有 8 種基本數據類型?;绢愋陀挚煞譃閿底中停ㄕ秃透↑c型),字符型以及布爾型。在編碼時要注意,為變量所賦的值不要超出其類型的范圍。