在 Day23,我們看到了以下寫法。
...
private var dessertsSold = 0
...
var 是一種定義變數的方式,另一種是 val。
我們可以用 var 來定義值可以改變的變數;用 val 來定義值維持不變的變數。
變數保存的是物件的參考(reference)。
當編譯器將物件指派給變數時,不會將物件本身放入變數,而是將指向物件的參考放入變數。
因為變數保存物件參考,所以它可以訪問(access)物件。
如果用 val 宣告變數,指向物件的參考會永遠待在變數裡面,不會被換掉。
但是使用 var 的話,你可以指派別的值給變數。
回到 Day23,所以我們可以將dessertsSold = 0
放到任何段落(在那篇例子,指的是生命週期回調方法),來重新指派值給dessertsSold
變數。
讓我們小結一下,
用 var 定義變數代表變數的物件參考可被換掉;用 val 定義變數代表變數永遠保存同一個物件的參考。
參考資料