Java中參數(shù)的傳遞方式

1. 概述

總的來說,計(jì)算機(jī)語言給子程序傳遞參數(shù)的方法有兩種。第一種方法是按值傳遞(call-by-value)。這種方法將一個(gè)參數(shù)值(value)復(fù)制成為子程序的正式參數(shù)。這樣,對子程序的參數(shù)的改變不影響調(diào)用它的參數(shù)。第二種傳遞參數(shù)的方法是引用調(diào)用(call-by-reference)。在這種方法中,參數(shù)的引用(而不是參數(shù)值)被傳遞給子程序參數(shù)。在子程序中,該引用用來訪問調(diào)用中指定的實(shí)際參數(shù)。這樣,對子程序參數(shù)的改變將會(huì)影響調(diào)用子程序的參數(shù)。根據(jù)傳遞的對象不同,Java將使用這兩種不同的方法。

2. 傳遞一個(gè)簡單類型

在Java中,當(dāng)你給方法傳遞一個(gè)簡單類型時(shí),它是按值傳遞的。因此,接收參數(shù)的子程序參數(shù)的改變不會(huì)影響到該方法之外。

我們來看如下例子:

class PassByValue {
    public void foo (int i, int j) {
        i += 1;
        j += 1;
    }
}

public class Test {
    public static void main(String[] args) {
        PassByValue p = new PassByValue();
        int i = 1;
        int j = 2;
        System.out.println("Original values of i and j: " + i + " " + j);
        p.foo(i, j);
        System.out.println("New values of i and j: " + i + " " + j); 
    }
}

最后,程序的輸出結(jié)果為:

Original values of i and j: 1 2
New values of i and j: 1 2

可見,在foo函數(shù)內(nèi)的操作并不影響ij的值,它們并沒有從12變?yōu)?code>2和3,說明當(dāng)形參為基本數(shù)據(jù)類型時(shí),Java是傳值方式進(jìn)行的函數(shù)調(diào)用。

3. 傳遞一個(gè)對象

當(dāng)給Java傳遞一個(gè)對象時(shí),它是通過引用傳遞的。這是因?yàn)槲覀冊趧?chuàng)建一個(gè)類類型的變量時(shí),僅僅是創(chuàng)建了一個(gè)類的引用。因此,當(dāng)我們將這個(gè)引用傳遞給一個(gè)方法時(shí),接收它的參數(shù)將會(huì)指向該參數(shù)指向的同一個(gè)對象。

我們來看如下例子:

class PassByReference {
    int i, j;

    public PassByReference(int i, int j) {
        this.i = i;
        this.j = j;
    }

    public void foo(PassByReference p) {
        p.i += 1;
        p.j += 1;
    }
}

public class Test {
    public static void main(String[] args) {
        PassByReference p = new PassByReference(1, 2);    
        System.out.println("Original values of i and j: " + p.i + " " + p.j);
        p.foo(p);
        System.out.println("New values of i and j: " + p.i + " " + p.j); 
    }
}

最后,程序的輸出結(jié)果為:

Original values of i and j: 1 2
New values of i and j: 2 3

可以看到,在這個(gè)例子中,foo函數(shù)中的操作影響了作為參數(shù)的對象。

4. 結(jié)論

當(dāng)參數(shù)是基本數(shù)據(jù)類型時(shí),是傳值方式調(diào)用;而當(dāng)參數(shù)是引用型的變量時(shí),則是傳址方式調(diào)用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容