JVM 將數組對象存儲在堆(Heap)內存區域。堆用於動態內存分配,內存塊可按任意順序分配和釋放。數組變量本身棧上存儲引用,實際數據在堆上。
// 聲明:僅創建引用變量,不分配數組內存,值為 null
int[] arr; // 或 int arr[];
// 錯誤示範:分步初始化語法非法
double[] myList;
myList = {1, 2, 3}; // 編譯錯誤!
// 正確:聲明、創建、初始化一氣呵成
double[] myList = {1, 2, 3};
// 或
double[] myList = new double[]{1, 2, 3};
public static void main(String[] args) {
int x = 1;
int[] y = new int[10];
modify(x, y);
System.out.println("x = " + x); // 輸出 1
System.out.println("y[0] = " + y[0]); // 輸出 10
}
public static void modify(int num, int[] arr) {
num = 10; // 基本類型:傳遞值的副本,不影響原變量
arr[0] = 10; // 數組類型:傳遞引用副本,指向同一堆內存,修改生效
}
核心原則:Java 僅支持值傳遞。基本類型傳值,引用類型傳引用的副本(地址值),因此可通過引用修改對象內部狀態,但無法改變引用本身指向。
| 算法 | 時間複雜度 | 空間複雜度 | 穩定性 | 備註 |
|---|---|---|---|---|
| 選擇排序 | O(n²) | O(1) | 不穩定 | 每輪選最小值換到前端 |
| 冒泡排序 | O(n²) | O(1) | 穩定 | 相鄰比較交換,大值沉底 |
| 快速排序 | O(n log n) | O(log n) | 不穩定 | 分治法,基準值分區 |
| 插入排序 | O(n²) | O(1) | 穩定 | 構建有序序列,插入新元素 |
Arrays.sort() / Collections.sort()(雙軸快排 / TimSort),性能經過高度優化Arrays.sort(),對象數組用 Arrays.sort(T[], Comparator)Arrays.parallelSort() (Java 8+)