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

分享

JAVA中方法參數(shù)的引用傳遞

 Levy_X 2017-05-26

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


java中參數(shù)的傳遞有兩種,分別是按值傳遞和按引用傳遞。按值傳遞不必多說,下面就說一下按引用傳遞。

當(dāng)一個對象被當(dāng)作參數(shù)傳遞到一個方法,這就是所謂的按引用傳遞。

public Class  User{    

    private String name;


    public String getName() {

        return name;

    }   

    public void setName(String name) {

        this.name = name;

    }    

}


public Class Test {    

    public void set(User user){

        user.setName("hello world");

    }    

    public static void main(String[] args){        

        Test test = new Test();

        User user = new User();

        test.set(user);

        System.out.println(user.getName());

    }

}

上面代碼的輸出結(jié)果是“hello world”,這不必多說,那如果將set方法改為如下,結(jié)果會是多少呢?

public void set(User user){
        user.setName("hello world");
        user = new User();
        user.setName("change");
    }

答案依然是“hello world”,下面就讓我們來分析一下如上代碼。

首先

 User user = new User();

是在堆中創(chuàng)建了一個對象,并在棧中創(chuàng)建了一個引用,此引用指向該對象,如下圖:


 test.set(user);

        是將引用user作為參數(shù)傳遞到set方法,注意:這里傳遞的并不是引用本身,而是一個引用的拷貝。也就是說這時有兩個引用(引用和引用的拷貝)同時指向堆中的對象,如下圖:



 user.setName("hello world");

在set()方法中,“user引用的拷貝”操作堆中的User對象,給name屬性設(shè)置字符串"hello world"。如下圖:


user=new User();

在set()方法中,又創(chuàng)建了一個User對象,并將“user引用的拷貝”指向這個在堆中新創(chuàng)建的對象,如下圖:


 user.setName("change");

在set()方法中,“user引用的拷貝”操作的是堆中新創(chuàng)建的User對象


set()方法執(zhí)行完畢,目光再回到mian()方法

  System.out.println(user.getName());

       因為之前,"user引用的拷貝"已經(jīng)將堆中的User對象的name屬性設(shè)置為了"hello world",所以當(dāng)main()方法中的user調(diào)用getName()時,打印的結(jié)果就是"hello world"。如下圖:


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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多