Java 資料型別 (Data Types)

Java 是靜態型別語言,每個變數都必須指定資料型別。資料型別分為兩大類:基本型別 (Primitive Types) 和參考型別 (Reference Types)。

基本型別 (Primitive Types)

Java 有 8 種基本型別:

整數型別

型別大小範圍
byte1 byte-128 ~ 127
short2 bytes-32,768 ~ 32,767
int4 bytes-2^31 ~ 2^31-1 (約 ±21億)
long8 bytes-2^63 ~ 2^63-1
byte b = 100;
short s = 10000;
int i = 100000;
long l = 10000000000L;  // long 要加 L 後綴

浮點數型別

型別大小精度
float4 bytes約 6-7 位有效數字
double8 bytes約 15 位有效數字
float f = 3.14f;      // float 要加 f 後綴
double d = 3.14159;   // 預設是 double

字元型別

型別大小說明
char2 bytes單一 Unicode 字元
char c1 = 'A';
char c2 = '中';
char c3 = 65;        // ASCII 碼,等同於 'A'
char c4 = '\u0041';  // Unicode,等同於 'A'

布林型別

型別大小說明
boolean1 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
記憶體StackHeap

數字字面值

整數字面值

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(溢位)