JAVA引用傳遞問題

可能有些同學覺得,只要是引用傳遞,對引用的修改直接影響着原對象,其實不然,只有對引用對象的內部做了修改,纔會影響原對象,如果直接將引用修改了,則對原對象沒有影響,唯一的影響就是:這個被修改的引用,現在不是原來對象的引用,而是新對象的引用。
引用傳遞指的是傳遞的時候,傳遞的是對象的引用。如果對引用的內部成員進行操作,則會直接影響到原對象,但是如果直接把此引用指向了其他對象,那對不起,這個引用從此以後,便與之前的對象沒有任何關係,當前代表的僅僅是新指向的對象。看下例子吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
classSimInt{
    intvalue;
    publicSimInt(intvalue){
        this.value=value;
    }
}
publicclass Main{
    publicstatic void change1(SimInt si){
        si=newSimInt(3);//重新指向了新的對象,原對象不受影響
    }
    publicstatic void change2(SimInt si){
        si.value=3;//通過引用操作對象內部成員,原對象被改變
    }
    publicstatic void main(String args[]) {
    SimInt si1=newSimInt(1);
        System.out.println(si1.value);//輸出1
        change1(si1);
        System.out.println(si1.value);//輸出1
      change2(si1);
       System.out.println(si1.value);//輸出3
    }
}

引用傳遞是將實參的內存地址傳遞給形參 也可以理解爲形參相當於新建的引用 該引用和實參指

向相同的內存地址 所以doSomething(Integer integer)新建了引用integer 當doSomething(var2)

;被調用時 integer和var2指向了相同的內存地址. 當integer=newInteger(2);被調用時integer指向

了新的內存地址 但這並沒有改變var2指向的內存地址的值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章