首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 基礎核心:深入解析八大基本資料型別與封裝類別

     編輯:Java 程式設計入門

前言:為何 Java 基本型別具有跨平台一致性?

在 C/C++ 中,int、long 等型別的大小會隨編譯器與硬體架構而異(16/32/64 位元)。Java 採取截然不同的策略:由 Java 虛擬機(JVM)統一定義所有基本型別的大小、範圍與行為。無論 JVM 運行於 Windows、Linux、macOS 或嵌入式裝置,int 永遠是 32 位元有號整數,double 永遠遵循 IEEE 754 雙精度標準。這是「Write Once, Run Anywhere」的基石之一。

一、八大基本資料型別完整對照表

Java 基本型別分為四大類別:整數、浮點數、字元、布林值。它們不是物件,佔用固定記憶體,存取速度最快。

類別 型別 大小 範圍 / 精度 預設值
整數 byte 1 位元組 (8 bits) -128 ~ 127 0
short 2 位元組 (16 bits) -32,768 ~ 32,767 0
int 4 位元組 (32 bits) -2,147,483,648 ~ 2,147,483,647 0
long 8 位元組 (64 bits) -9.22×10¹⁸ ~ 9.22×10¹⁸ 0L
浮點數 float 4 位元組 (32 bits) IEEE 754 單精度 (約 6-7 位有效數字) 0.0f
double 8 位元組 (64 bits) IEEE 754 雙精度 (約 15 位有效數字) 0.0d
字元 char 2 位元組 (16 bits) Unicode 字元集 (U+0000 ~ U+FFFF) '\u0000'
布林值 boolean 1 位元 (JVM 實作通常佔 1 位元組) true / false false

二、關鍵特性與限制

1. 所有數值型別皆為有號

Java 無 unsigned 關鍵字。byte 範圍為 -128~127 而非 0~255。若需處理無號資料,需用較大型別(如 int)配合位元運算。

2. 嚴格的型別轉換規則

  • 數值型別間可轉換(自動擴展 / 強制縮小)
  • boolean 不能與任何其他型別互轉(含數值、字元)
  • 物件參考與基本型別無直接轉換,需透過封裝類別

3. 無 sizeof 運算子

因型別大小固定且禁止直接記憶體存取,Java 移除 sizeof。如需得知大小,查表即可。

三、封裝類別:讓基本型別擁有物件行為

為了在集合框架、泛型、反射等物件導向場景使用基本值,Java 提供八個對應的不可變封裝類別:

  • Byte、Short、Integer、Long、Float、Double 繼承自 Number
  • Character、Boolean 直接繼承 Object

常用實用方法

// 字串 → 基本型別 (靜態工廠方法)
int i = Integer.parseInt("123");
double d = Double.valueOf("3.14"); // 回傳 Double 物件

// 基本型別 → 字串
String s = Integer.toString(456);

// 物件 → 其他基本型別 (多型)
Number n = Integer.valueOf(100);
double d = n.doubleValue(); // 100.0

// 自動裝箱/拆箱 (Java 5+)
Integer obj = 100;      // 裝箱
int val = obj;          // 拆箱

效能提醒

頻繁裝箱/拆箱會產生大量暫時物件,增加 GC 壓力。效能敏感的迴圈、大量運算建議直接使用基本型別。

四、初始化規則:成員變數 vs 區域變數

宣告位置 是否自動初始化 未顯式賦值時的值 編譯器檢查
類成員變數 (Instance/Static Field) 是 對應型別預設值 (0, false, null) 無錯誤
方法區域變數 (Local Variable) 否 不可用 (佔位但無值) 編譯錯誤:「variable might not have been initialized」

最佳實務: 區域變數宣告時務必立即賦值,或在所有執行路徑使用前確保已賦值。

五、程式碼範例:驗證預設值與初始化行為

public class PrimitiveDemo {
    // 成員變數 - 自動初始化
    boolean b;
    byte by;
    short s;
    int i;
    long l;
    char c;
    float f;
    double d;

    public void testLocal() {
        int localInt; // 未初始化
        // System.out.println(localInt); // 編譯錯誤!
        
        localInt = 10; // 必須先賦值
        System.out.println("localInt = " + localInt);
    }

    public static void main(String[] args) {
        PrimitiveDemo demo = new PrimitiveDemo();
        System.out.println("boolean: " + demo.b);   // false
        System.out.println("byte: " + demo.by);     // 0
        System.out.println("char: [" + demo.c + "]"); // 空白 (\\u0000)
        System.out.println("double: " + demo.d);    // 0.0
        demo.testLocal();
    }
}

總結

  • 掌握八大基本型別的固定大小、範圍、預設值是 Java 基礎核心
  • boolean 獨立於數值體系,不可互轉
  • 封裝類別提供物件包裝、字串轉換、工具方法,但有記憶體與效能成本
  • 區域變數必須顯式初始化,成員變數自動獲得預設值
  • 現代 Java (Java 5+) 的自動裝箱/拆箱語法糖方便但需理解其底層機制
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved