java中按值傳遞和引用傳遞區別
阿新 • • 發佈:2019-02-14
java中在引數傳遞時有2種方式,
一種是按值傳遞:值傳遞是指在呼叫函式時將實際引數複製一份傳遞到函式中,這樣在函式中如果對引數進行修改,將不會影響到實際引數。簡單來說就是直接複製了一份資料過去,因為是直接複製,所以這種方式在傳遞時如果資料量非常大的話,執行效率自然就變低了,所以java在傳遞資料量很小的資料是值傳遞,比如java中的各種基本型別:int,float,double,boolean等型別的,具體可以自己測試。
程式碼:
結果:
另外一種是按引用傳遞:引用傳遞其實就彌補了上面說的不足,如果每次傳引數的時候都複製一份的話,如果這個引數佔用的記憶體空間太大的話,執行效率會很底下,所以引用傳遞就是直接把記憶體地址傳過去,也就是說引用傳遞時,操作的其實都是源資料,這樣的話修改有時候會衝突,記得用邏輯彌補下就好了,具體的資料型別就比較多了,比如Object,二維陣列,List,Map等除了基本型別的引數都是引用傳遞。
程式碼:
結果:
有些文章中寫的是java中所有的傳參方式都是按值傳遞,這也說得通,無非就是文字遊戲,因為無論是按值傳遞還是按引用傳遞都是把值傳遞過去了,所以就叫按值傳遞。