在Java編程中,數組是非常常用的數據結構,而數組作爲方法參數傳遞的方式,是初學者需要掌握的基礎知識點。有時候我們會發現,方法裏修改數組元素後,原來的數組也跟着變了;有時候方法裏重新給數組賦值,原來的數組卻沒變。這背後其實是兩種不同的傳參方式在起作用。今天我們就來詳細聊聊Java數組作爲方法參數的兩種傳遞方式。
一、基礎回顧:Java參數傳遞是“值傳遞”,數組是對象¶
首先要明確一個核心概念:Java中的參數傳遞始終是“值傳遞”。這意味着當我們把一個變量傳給方法時,方法接收到的是這個變量的“值”的副本。
對於基本數據類型(如int、double等),傳遞的是值本身(比如把5傳給方法,方法裏的參數就是5)。而數組在Java中是對象,所以數組作爲參數傳遞時,傳遞的是數組的引用(可以理解爲數組在內存中的“地址”)。這就像我們把家門的鑰匙交給別人,別人拿到鑰匙後可以開門操作房間裏的東西,但如果別人只是給鑰匙換了一把新的,原來的鑰匙(原數組引用)依然能打開原來的門(原數組)。
二、第一種方式:修改數組元素(原數組被改變)¶
當方法接收數組參數後,通過數組的引用操作原數組的元素時,原數組的內容會被修改。
舉個例子:
假設我們有一個數組 [1, 2, 3],現在需要寫一個方法,讓數組中的每個元素都加1。這個方法會直接修改原數組的元素。
public class ArrayParamDemo {
// 方法:給數組每個元素加1
public static void addOne(int[] arr) {
for (int i = 0; i < arr.length; i++) {
arr[i]++; // 修改數組元素(操作原數組)
}
}
public static void main(String[] args) {
int[] original = {1, 2, 3};
System.out.println("調用方法前:" + Arrays.toString(original)); // 輸出:[1, 2, 3]
addOne(original); // 傳遞數組original給方法
System.out.println("調用方法後:" + Arrays.toString(original)); // 輸出:[2, 3, 4]
}
}
爲什麼原數組會被修改?
因爲 addOne 方法中的參數 arr 和 original 指向同一個數組對象(它們的引用相同)。當方法裏執行 arr[i]++ 時,實際上是在修改原數組 original 中對應位置的元素。
三、第二種方式:修改數組引用(原數組不被改變)¶
如果方法中修改的是數組參數的“引用”(即讓參數指向一個新的數組),那麼原數組的引用不會被改變,原數組的內容也就不會受影響。
舉個例子:
假設我們寫一個方法,讓參數數組指向一個新創建的數組。這時候,原數組的引用依然是原來的,所以原數組內容不變。
public class ArrayParamDemo2 {
// 方法:讓參數數組指向新數組
public static void changeArray(int[] arr) {
// 給arr賦值一個新的數組(此時arr指向新數組)
arr = new int[]{5, 6, 7, 8};
}
public static void main(String[] args) {
int[] original = {1, 2, 3, 4};
System.out.println("調用方法前:" + Arrays.toString(original)); // 輸出:[1, 2, 3, 4]
changeArray(original); // 傳遞數組original給方法
System.out.println("調用方法後:" + Arrays.toString(original)); // 輸出:[1, 2, 3, 4](沒變!)
}
}
爲什麼原數組不變?
方法中的 arr 是 original 的“引用副本”。當我們執行 arr = new int[]{5,6,7,8} 時,只是讓這個“引用副本”指向了新數組,original 的引用並沒有被修改,所以原數組 original 依然指向原來的數組。
四、兩種方式的核心區別¶
| 傳遞方式 | 方法內操作 | 原數組是否被修改 |
|---|---|---|
| 方式一(修改元素) | 通過引用修改原數組的元素 | 是 |
| 方式二(修改引用) | 修改參數的引用指向新數組 | 否 |
五、常見誤區與注意事項¶
初學者常犯的錯誤是:以爲數組作爲參數傳遞時會複製整個數組,所以方法內修改不會影響原數組。但實際上,數組傳遞的是“引用”,只要方法通過這個引用操作原數組的元素,就會影響原數組。只有當方法中修改的是參數的“引用”(指向新數組)時,原數組纔不受影響。
總結¶
Java數組作爲方法參數傳遞時,傳遞的是數組的“引用”(內存地址)。兩種核心方式:
1. 修改元素:方法通過引用操作原數組的元素,原數組內容會被改變;
2. 修改引用:方法讓參數指向新數組,原數組引用不變,內容不受影響。
掌握這兩種方式,就能靈活處理數組在方法中的傳參和修改邏輯,避免常見的錯誤!