Java 八大基本資料類型
| 分類 | 類型 | 位元數 | 預設值 | 範圍 |
| 整數型 | byte | 8 | 0 | -128 ~ 127 |
| short | 16 | 0 | -32,768 ~ 32,767 |
| int | 32 | 0 | -2,147,483,648 ~ 2,147,483,647 |
| long | 64 | 0L | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
| 浮點型 | float | 32 | 0.0f | ±3.4E-38 ~ ±3.4E+38 (約 7 位有效數字) |
| double | 64 | 0.0 | ±1.7E-308 ~ ±1.7E+308 (約 15 位有效數字) |
| 字元型 | char | 16 | '\u0000' | 0 ~ 65,535 (Unicode 字元) |
| 布林型 | boolean | - | false | true / false |
參考類型補充
String 為參考類型 (非基本類型),不可變字元序列,常用於文字處理。
變數宣告方式
方式一:宣告並初始化
int age = 25;
String name = "張三";
double score = 98.5;
方式二:批次宣告同類型變數
int a, b, c; // 宣告三個 int 變數
double x = 1.1, y = 2.2, z = 3.3; // 宣告並初始化
資料類型轉換完整規則
自動類型轉換 (隱式/擴大轉換)
byte → short → int → long → float → double
char → int
// 記憶體佔用由小到大,精度由低到高
int i = 100;
long l = i; // 自動轉為 long
double d = l; // 自動轉為 double
強制類型轉換 (顯式/縮小轉換)
double → float → long → int → short → byte
// 格式:目標類型 變數 = (目標類型) 來源變數;
double d = 3.14;
int i = (int) d; // i = 3,截斷小數
long l = 10000000000L;
int j = (int) l; // 可能溢位,數值錯誤
轉換細節與陷阱
- byte/short/char 運算自動提升為 int
byte a = 10, b = 20;
byte c = a + b; // 編譯錯誤!結果為 int
byte c = (byte)(a + b); // 正確
short s = 1;
s = s + 1; // 錯誤
s += 1; // 正確,隱含強制轉型
- 混合運算結果取決於最高精度類型
int + long → long
float + double → double
int + double → double
- 字面值類型預設
整數字面值預設為 int (超出範圍報錯)
長整數字面值需加 L: 100L
浮點字面值預設為 double
單精度需加 f: 3.14f
進制表示法
| 進制 | 前綴 | 範例 | 十進制值 |
| 二進制 | 0b / 0B (Java 7+) | 0b1010 | 10 |
| 八進制 | 0 | 012 | 10 |
| 十進制 | 無 | 10 | 10 |
| 十六進制 | 0x / 0X | 0xA | 10 |
常見面試題陷阱
題 1:byte b = 130 結果?
// 編譯錯誤!130 超出 byte 範圍
// 必須強制轉型:byte b = (byte) 130; // 結果 -126
題 2:short s = 1; s = s + 1; 編譯通過嗎?
// 不通過!s+1 為 int 運算,結果 int 無法賦給 short
// 修正:s = (short)(s + 1) 或 s += 1
題 3:long l = 2147483648; 編譯通過嗎?
// 不通過!字面值 2147483648 超出 int 範圍
// 修正:long l = 2147483648L;
最佳實踐建議
- 整數優先用
int,大數值用 long (加 L)
- 浮點數優先用
double,省記憶體用 float (加 f)
- 金額計算嚴禁 float/double,使用
BigDecimal
- 明確寫出強制轉型,避免隱式精度損失
- 善用 IDE 編譯提示,捕捉類型不匹配錯誤