Java 虛擬機規範定義三大數據類型類別:基本類型、引用類型、返回地址類型(已淘汰)。引用類型 相當於 C/C++ 的指針,但去除了指針運算,僅保留「引用對象」能力。JVM 從不直接操作對象,而是通過引用間接訪問。
class 定義的類型,引用指向堆上對象實例。interface 定義的類型,引用指向實現該介面的對象實例。java.lang.Object,元素可為基本類型或引用類型。instanceof 檢測永遠返回 falseMyObject obj = new MyObject(); // 合法:引用指向堆上實例
MyObject obj2 = null; // 合法:空引用
MyObject obj3 = 0; // 編譯錯誤:基本類型不可賦值給引用類型
JVM 內部以指向方法區類元數據與堆上實例數據的指針結構實現類引用。
interface Comparable { void compare(Comparable item); }
class SortItem implements Comparable {
public void compare(Comparable item) { /* 實現 */ }
}
Comparable c = new SortItem(); // 介面引用指向實現類實例
c.compare(c); // 多態調用
關鍵特性:
int[] arr = new int[5]; // 固定長度,元素默認 0
int[] arr2 = {9, 5, 6}; // 字面量初始化
int[] arr3 = null; // 引用為空
int len = arr.length; // 長度屬性(非方法),不可變
int first = arr[0]; // 索引從 0 開始
clone()、toString() 等方法ArrayIndexOutOfBoundsException,保證記憶體安全String[] 可賦值給 Object[],但運行時類型檢查防止類型污染Java 無 struct/union,通過類/介面封裝數據與行為:
// C 結構
struct Car {
char* model;
char* make;
int year;
Engine* engine;
Body* body;
Tire** tires;
};
// Java 等價建模
interface CarModels { /* 常量定義 */ }
interface CarMakes { /* 常量定義 */ }
class Car {
private CarModels model;
private CarMakes make;
private int year;
private Engine engine;
private Body body;
private Tire[] tires;
// 構造器、getter/setter、業務方法...
}
| 類別 | 包 | 核心功能 | 典型方法 |
|---|---|---|---|
| String | java.lang | 不可變字符序列 | length(), substring(), toUpperCase(), equals() |
| Vector | java.util | 同步可擴展對象數組 | add(), elementAt(), isEmpty(), remove() |
| ArrayList | java.util | 非同步動態數組(現代首選) | get(), add(), size(), remove() |
| HashMap | java.util | 鍵值對映射 | put(), get(), containsKey() |
Java 的類型系統以「基本類型 + 引用類型」為基石,引用類型再分「類、介面、數組」三大支柱。理解引用語義(傳值調用中傳遞的是引用副本)、null 語義、數組邊界檢查與協變性,是寫出無 NPE、無越界、高性能 Java 代碼的前提。復合類型通過類/介面實現數據與行為封裝,集合框架(Collection/Map)則是預定義復合類型的集大成者,後續文章將深入剖析。