Java到底是pass by value還是pass by reference?說法眾說紛紜,後來看到這篇文章Java is Pass by Value and Not Pass by Reference後,觀念才整個釐清。
Java是pass by value!
範例:
1 | public class Balloon { |
結果:1
2
3
4
5
6
7
8
9//使用swap()
red color=Red
blue color=Blue
blue color=Red
//使用swap1()
red color=Blue
blue color=Red
blue color=Red
分析:
- 尚未執行swap():
- 執行swap(),o1指向red,o2指向blue:
- swap()執行結束,原本的物件並沒有互相交換:
- 執行foo(),ballon指向blue:
- 執行foo()第一行,透過原本物件的setter method修改值:
- 執行foo()第二行:
- 執行foo()第三行:
因為Java是採用pass by value作法,當以物件作為參數傳入到method,在method裡面想要修改物件的值,需透過物件的setter method,這樣原本物件的值才會連帶一起變更。透過assign(=)或new等方式,原本物件的值都不會有變化。