小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

 流曲頻陽 2017-02-13

java中方法參數(shù)傳遞看似有兩種,值傳遞和引用傳遞。而實(shí)際上都是值傳遞。

所謂值傳遞,傳遞的是變量的副本就是說,在將變量a作為參數(shù)傳進(jìn)方法中時(shí),方法中接收到的是a的副本,在方法中對參數(shù)的修改實(shí)際上修改的是a的副本,所以不會影響到a的值。

而引用傳遞,傳遞的是變量的內(nèi)存地址。在將變量a作為參數(shù)傳遞給方法時(shí),傳遞的是a的內(nèi)存地址,在方法中對參數(shù)的修改,實(shí)際上是修改的a本身。

因?yàn)閖ava的變量有兩類,一類是基本數(shù)據(jù)類型,一類是引用類型。所以就把基本數(shù)據(jù)類型作為參數(shù)進(jìn)行傳遞時(shí),當(dāng)做了“值傳遞“;把引用類型作為參數(shù)進(jìn)行傳遞時(shí),當(dāng)做了“引用傳遞“。 事實(shí)上無論是傳遞基本數(shù)據(jù)類型還是引用類型,java中都是按“值傳遞”進(jìn)行操作的。

在引用變量r作為 參數(shù)傳到方法中時(shí),傳遞的是r的副本。只不過r和r的副本都指向了同一個對象。

public class TestParamPassing {

public static void main(String[] args) {
    int b = 4;
    testValueParam(b);
    System.out.println("========  b : " + b);

    List list = new ArrayList();
    list.add("a");
    list.add("b");
    testReferenceParam(list);
    System.out.println("======== list  :  " + list);
}

public static void testReferenceParam(List list){
    list.add("c");
    list = new ArrayList<>();
    list.add("d");
    System.out.println("-------- list : " + list);
}

public static void testValueParam(int a){
    System.out.println("======== a: " + a);
    a=3;
    System.out.println("======== a after  : " + a);
}

}
執(zhí)行結(jié)果為:

======== a: 4
======== a after : 3
======== b : 4
-------- list : [d]
======== list : [a, b, c]

在方法testValueParam(int a)中,因?yàn)槭恰爸祩鬟f”,所以傳到方法中的是原始值的副本,所以在方法中對a的修改,不會影響到原始值。

在方法testReferenceParam(List list)中,因?yàn)槭恰爸祩鬟f”,所以傳到方法中的是原始值的副本,所以兩者都指向了同一個對象,因此在方法中對對象的修改,會影響到原始值指向的對象。但是,當(dāng)在方法中,將副本指向了其他的對象,再對副本指向的對象進(jìn)行修改,就不會影響到原始值所指向的對象了。所以在傳遞引用變量時(shí),也是“值傳遞”。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多