Java數組作爲方法參數:傳遞數組的兩種方式,懂嗎?

在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 方法中的參數 arroriginal 指向同一個數組對象(它們的引用相同)。當方法裏執行 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](沒變!)
    }
}

爲什麼原數組不變?
方法中的 arroriginal 的“引用副本”。當我們執行 arr = new int[]{5,6,7,8} 時,只是讓這個“引用副本”指向了新數組,original 的引用並沒有被修改,所以原數組 original 依然指向原來的數組。

四、兩種方式的核心區別

傳遞方式 方法內操作 原數組是否被修改
方式一(修改元素) 通過引用修改原數組的元素
方式二(修改引用) 修改參數的引用指向新數組

五、常見誤區與注意事項

初學者常犯的錯誤是:以爲數組作爲參數傳遞時會複製整個數組,所以方法內修改不會影響原數組。但實際上,數組傳遞的是“引用”,只要方法通過這個引用操作原數組的元素,就會影響原數組。只有當方法中修改的是參數的“引用”(指向新數組)時,原數組纔不受影響。

總結

Java數組作爲方法參數傳遞時,傳遞的是數組的“引用”(內存地址)。兩種核心方式:
1. 修改元素:方法通過引用操作原數組的元素,原數組內容會被改變;
2. 修改引用:方法讓參數指向新數組,原數組引用不變,內容不受影響。

掌握這兩種方式,就能靈活處理數組在方法中的傳參和修改邏輯,避免常見的錯誤!

小夜