public class Demo1 {
public static void main(String[] args) {
int arr[] = {2, 3, 4};
sort(arr);
System.out.println(Arrays.toString(arr));
}
public static void sort(int arr[]) {
int arr1[] = {0, 3, 4};
arr = Arrays.copyOfRange(arr1, 0, arr1.length);
}
}
Output: [2, 3, 4]
在這段程式碼中,我期望透過呼叫 sort 方法對 arr 進行修改,並將修改後的結果輸出。然而,輸出的結果仍然是原始的陣列 [2, 3, 4]。
這是因為在 Java 中,當你將陣列傳遞給 sort 方法時,實際上是將陣列的參考(記憶體位址)傳遞給了方法。在 sort 方法內部,你對 arr 進行了重新賦值,但這只是將區域變數 arr 指向了新的陣列 arr1,並不影響 main 方法中的原始陣列。
解決方法:#
- 對該參考指向的陣列進行修改
public class Demo1 {
public static void main(String[] args) {
int arr[] = {2, 3, 4};
sort(arr);
System.out.println(Arrays.toString(arr));
}
public static void sort(int arr[]) {
// 在sort方法中直接修改arr陣列
arr[0] = 0;
arr[1] = 3;
arr[2] = 4;
}
}
- 將 sort 的回傳值改為 int [],然後在 main 方法中進行修改
public class Demo1 {
public static void main(String[] args) {
int arr[] = {2, 3, 4};
arr = sort(arr);
System.out.println(Arrays.toString(arr));
}
public static int[] sort(int arr[]) {
int arr1[] = {0, 3, 4};
return Arrays.copyOfRange(arr1, 0, arr1.length);
}
}