Java 資料型別 (Data Types)
Java 是靜態型別語言,每個變數都必須指定資料型別。資料型別分為兩大類:基本型別 (Primitive Types) 和參考型別 (Reference Types)。
基本型別 (Primitive Types)
Java 有 8 種基本型別:
整數型別
| 型別 | 大小 | 範圍 |
|---|---|---|
byte | 1 byte | -128 ~ 127 |
short | 2 bytes | -32,768 ~ 32,767 |
int | 4 bytes | -2^31 ~ 2^31-1 (約 ±21億) |
long | 8 bytes | -2^63 ~ 2^63-1 |
byte b = 100;
short s = 10000;
int i = 100000;
long l = 10000000000L; // long 要加 L 後綴
浮點數型別
| 型別 | 大小 | 精度 |
|---|---|---|
float | 4 bytes | 約 6-7 位有效數字 |
double | 8 bytes | 約 15 位有效數字 |
float f = 3.14f; // float 要加 f 後綴
double d = 3.14159; // 預設是 double
字元型別
| 型別 | 大小 | 說明 |
|---|---|---|
char | 2 bytes | 單一 Unicode 字元 |
char c1 = 'A';
char c2 = '中';
char c3 = 65; // ASCII 碼,等同於 'A'
char c4 = '\u0041'; // Unicode,等同於 'A'
布林型別
| 型別 | 大小 | 說明 |
|---|---|---|
boolean | 1 bit* | true 或 false |
boolean isJavaFun = true;
boolean isFishTasty = false;
boolean 的實際大小取決於 JVM 實作,通常是 1 byte。
參考型別 (Reference Types)
參考型別包括類別、介面、陣列等,變數儲存的是物件的記憶體位址:
String name = "Java"; // String 類別
int[] numbers = {1, 2, 3}; // 陣列
Scanner scanner = new Scanner(System.in); // Scanner 類別
基本型別 vs 參考型別:
| 特性 | 基本型別 | 參考型別 |
|---|---|---|
| 儲存內容 | 實際的值 | 物件的記憶體位址 |
| 預設值 | 0, 0.0, false, '\u0000' | null |
| 記憶體 | Stack | Heap |
數字字面值
整數字面值
int decimal = 100; // 十進位
int binary = 0b1100100; // 二進位(0b 開頭)
int octal = 0144; // 八進位(0 開頭)
int hex = 0x64; // 十六進位(0x 開頭)
// 使用底線增加可讀性(Java 7+)
int million = 1_000_000;
long creditCard = 1234_5678_9012_3456L;
浮點數字面值
double d1 = 3.14;
double d2 = 3.14e2; // 科學記號,3.14 × 10² = 314
double d3 = 3.14E-2; // 3.14 × 10⁻² = 0.0314
float f = 3.14f; // float 需要 f 後綴
選擇適當的資料型別
一般建議:
- 整數:使用
int(最常用) - 需要更大範圍的整數:使用
long - 浮點數:使用
double(精度較高) - 布林值:使用
boolean - 單一字元:使用
char - 文字:使用
String
// 常見的變數宣告
int count = 0;
double price = 99.99;
boolean isActive = true;
String name = "Java";
char grade = 'A';
型別的最大值和最小值
可以使用包裝類別取得:
System.out.println("int 最大值:" + Integer.MAX_VALUE); // 2147483647
System.out.println("int 最小值:" + Integer.MIN_VALUE); // -2147483648
System.out.println("double 最大值:" + Double.MAX_VALUE); // 1.7976931348623157E308
System.out.println("long 最大值:" + Long.MAX_VALUE); // 9223372036854775807
溢位 (Overflow)
當數值超出型別範圍時會發生溢位:
int max = Integer.MAX_VALUE; // 2147483647
System.out.println(max + 1); // -2147483648(溢位)
byte b = 127;
b++;
System.out.println(b); // -128(溢位)