Java 基本數據類型是程序設計的基石。本文系統整理 8 大基本類型的位數、範圍、默認值、包裝類,並詳細闡述自動類型提升與強制類型轉換規則,附帶常見陷阱避坑指南。
| 分類 | 類型 | 位數 | 字節 | 默認值 | 取值範圍 | 包裝類 |
|---|---|---|---|---|---|---|
| 整數 | byte | 8 | 1 | 0 | -128 ~ 127 | Byte |
| short | 16 | 2 | 0 | -32,768 ~ 32,767 | Short | |
| int | 32 | 4 | 0 | -2,147,483,648 ~ 2,147,483,647 | Integer | |
| long | 64 | 8 | 0L | -9.22×10¹⁸ ~ 9.22×10¹⁸ | Long | |
| 浮點數 | float | 32 | 4 | 0.0f | ±3.4×10³⁸ (約 7 位有效數字) | Float |
| double | 64 | 8 | 0.0d | ±1.8×10³⁰⁸ (約 15-16 位有效數字) | Double | |
| 字符 | char | 16 | 2 | '\u0000' | 0 ~ 65,535 (Unicode 字符) | Character |
| 布爾 | boolean | 1 (JVM 實現相關) | - | false | true / false | Boolean |
123 是 int,long 需加 L (123L)1.2 是 double,float 需加 f (1.2f)'A' + 1 = 'B'規則:容量小 → 容量大,精度不損失,編譯器自動完成。
char → int → long → float → double
byte → short → int → long → float → double
特例:byte/short/char 之間**不會**互相自動提升,運算時**先統一提升為 int** 再計算。
byte a = 10, b = 20;
// byte c = a + b; // 編譯錯誤:結果是 int
int c = a + b; // 正確
byte d = (byte)(a + b); // 強轉回 byte
規則:容量大 → 容量小,可能損失精度/溢出,需程序員負責,語法:(目標類型)值。
double d = 3.14;
int i = (int) d; // 3,截斷小數
long l = 10000000000L;
int j = (int) l; // 1410065408,溢出截斷高位
float f = 1.23456789f;
double d2 = f; // 1.2345678806304932,精度已在 float 階段損失
byte b = 100; // ✅ 編譯器檢測 100 在 byte 範圍內,自動插入強轉
byte b2 = 200; // ❌ 超出範圍
short s = 100; // ✅
char c = 'A'; // ✅
char c2 = 65; // ✅ (int 常量在 char 範圍內)
int i = 100; // ✅
long l = 100; // ✅ (int 常量自動提升)
float f = 1.2f; // ✅
double d = 1.2; // ✅
| 陷阱 | 代碼示例 | 結果/原因 | 解決 |
|---|---|---|---|
| 整數溢出 | int x = 2_147_483_647; x++; | -2_147_483_648 | 用 long 或 BigInteger |
| 浮點數精度丟失 | System.out.println(0.1 + 0.2); | 0.30000000000000004 | 金額計算用 BigDecimal |
| 自動拆箱空指針 | Integer a = null; int b = a; | NPE | 判空或用 Optional |
| 包裝類緩存範圍 | Integer a = 127, b = 127; a == b → true Integer c = 128, d = 128; c == d → false | -128~127 緩存 | 比較值用 equals() |
| char 與 int 混淆 | char c = '1'; System.out.println(c + 0); | 49 (ASCII 碼) | Character.getNumericValue(c) 獲取數值 1 |
String 參數enum 或 boolean,勿用 int 常量List<Integer> 而非 List<int> (基本類型不可泛型化)掌握 8 大基本類型的位數、範圍、默認值、包裝類,理解自動提升鏈 (byte→short→int→long→float→double)與強轉風險,警惕浮點精度、整數溢出、自動拆箱 NPE、包裝類緩存四大坑,是寫出健壯 Java 代碼的基礎功。