所以當我們操作乙個基本型別的變數時,是直接在棧中操作的變數的值。而我們對乙個引用型別的變數進行操作的時候,
是我們先通過引用到棧中拿到這個物件在堆中的位址,再對堆中的資料進行操作。
public
class test
public
static
void
plug(int num)
}
上面**中對 基本型別變數a 進行了操作,但是輸出的結果還是100!
首先變數a 是乙個基本變數,進行的操作都是對它的值得操作,在方法plug中的形參只是對變數a 的值得複製,對變數a 沒有影響。
public
class test1
public
static
void
change(string arg)
}
上面**對 引用型別變數str 進行了操作,輸出結果是0。
為什麼呢?
首先對引用型別變數str 進行的操作都是對它持有位址對應的堆記憶體資料進行的操作。change方法的形參只是對它引用的乙個宣告,
也就是說變數str和形參arg同時指向了同乙個堆記憶體,也就是「1001」對應的資料記憶體,而change方法,對這個記憶體的值進行了修改。
所以在輸出的時候變數str拿到的資料就是經過change方法之後的資料「0」。
public
class test2
public
static
void
change(string arg)
}
大家在看上面的**,change方法中做了改變,這樣的輸出結果就變成了「1001」。
是這樣的,new操作會在堆記憶體中開闢記憶體空間,這時,變數str和形參arg指向的就不是同乙個堆記憶體空間了,這樣不管變數arg
做怎樣的操作都不會影響到變數str,因為變數arg操作的堆記憶體空間和str沒關係,所以輸出的結果就是「1001」。
Java 值傳遞與位址傳遞(引用傳遞)區別
值傳遞 pass by value 是指在呼叫函式時將實際引數複製乙份傳遞到函式中,這樣在函式中如果對 引數 進行修改,將不會影響到實際引數。傳遞物件往往為整型浮點型字元型等基本資料結構。public class passbyvaluereference private static void pa...
引用傳遞與值傳遞
看 define n 10000 define n 10000 ini set memory limit 1g function microtime float function printarray0 arr 引用傳遞 function printarray1 arr 值傳遞 for i 0 i ...
值傳遞與引用傳遞
分析 形參是實參的拷貝,改變形參的值並不會影響外部實參的值。由於x 1 是在test方法棧裡面執行的,所以只會改變test方法棧裡面的x值,而不會改變main方法棧裡面的x值 形參的改變不會影響實參 引用傳遞,傳遞的是實際引數的位址.傳遞的是值的引用,也就是說傳遞前和傳遞後都指向同乙個引用 同乙個記...