在 C/C++ 中,函數無法直接返回數組,只能返回指針。這導致「數組的生命週期」難以控制:若在棧上分配,函數返回後內存失效;若在堆上分配,調用者必須記得釋放,否則內存洩漏。
Java 同樣返回數組引用(本質是指針),但區別在於:
public class IceCream {
static String[] flav = {"Chocolate", "Strawberry", "Vanilla Fudge Swirl", ...};
static String[] flavorSet(int n) {
n = Math.abs(n) % (flav.length + 1);
String[] results = new String[n];
int[] picks = new int[n];
// 初始化為 -1 表示未選
for (int i = 0; i < picks.length; i++) picks[i] = -1;
for (int i = 0; i < picks.length; i++) {
retry: while (true) {
int t = (int)(Math.random() * flav.length);
for (int j = 0; j < i; j++)
if (picks[j] == t) continue retry; // 去重
picks[i] = t;
results[i] = flav[t];
break;
}
}
return results; // 直接返回數組引用
}
// main 方法測試輸出 20 組隨機口味...
}
results 在方法內創建,但返回的是引用,外部可正常使用。retry 配合 continue 實現雙層循環跳出,避免字符串比較的低效。Java 通過「引用語義 + 自動垃圾回收」,徹底消除了 C/C++ 返回數組時的內存管理噩夢。開發者只需專注業務邏輯,大膽返回數組即可。