原文標題:Variables in Kotlin, differences with Java. var vs val (KAD 02) 作者:Antonio Leiva 時間:Nov 28, 2016 原文鏈接:http://antonioleiva.com/variables-kotlin/ K ...
原文標題:Variables in Kotlin, differences with Java. var vs val (KAD 02)
時間:Nov 28, 2016
原文鏈接:http://antonioleiva.com/variables-kotlin/
Kotlin系列課程的第二課:Kotlin中變數不同於Java: var 對val。
在這第二章節中,我們將瞭解Kotlin中變數是怎樣工作的,什麼是val和var,什麼時間使用它們。
我從這開始,是因為理解這部分內容對後續討論怎樣在類中創建“欄位”時非常有用(還可瞭解它們不是欄位)。
Kotlin變數
如Java那樣,只要在變數的範圍內執行代碼,Kotlin變數就可以被賦值、修改,在程式中不同位置被使用。
但是,我們將聚焦在它與Java不同的方面。
-
變數分可變的和不可變的
在Java中也分可變與不可變(如果不希望變數被改變,可將變數說明為final),但是在Kotlin中,更簡潔的、更常用的是:只要可能,在Kotlin中首選時不變值。
事實上,在程式中大部分地方使用不可變的變數,可帶來很多益處,如:可預測的行為和線程安全。
-
用val或var聲明變數,指明它們是不可變的或可變的
在Kotlin中有趣的是大部分情況你不需要說明你使用對象的類型,而編譯器就是推斷它。
所以,我們只需要依據要產生的變數類型填寫var或val,其類型通常能夠被推斷出來。我們也可以明確地指定變數類型。
一些例子:
1 var x = 7 2 var y: String = "my String" 3 var z = View(this)
說明:如你所見,你不需要用new來創建對象的新實例。
-
類型轉換是自動完成的
無論何時,編譯器能夠檢測沒有其它可選項,自動地完成類型轉換。非常棒!
1 val z: View = findViewById(R.id.my_view) 2 3 if (z is TextView) { 4 z.text = "I've been casted!" 5 }
看見我沒有調用setText()嗎?這將在下一篇說明!
-
在Kotlin中,所有都是對象
沒有基本類型,沒有void。如果有時沒有返回值,實際時返回Unit對象。大多數情況下,Uint可以省略,但是它確實存在的,被隱藏了。
因此,所有這些比哪裡都是對象:
1 val x: Int = 20 2 val y: Double = 21.5 3 val z: Unit = Unit
-
簡潔的數字類型不能賦值給複雜的類型
例如,整形不能賦值長變數。下麵的代碼不能通過編譯:
1 val x: Int = 20 2 val y: Long = x
你需要明確的進行轉換:
1 val x: Int = 20 2 val y: Long = x.toLong()
結論
這些是在Java和Kotlin之間能夠找出的明顯不同之處。通常,Kotlin變數提供更加靈活的、安全的(由於任何可能時用val約定)和更清晰的、簡潔的代碼。
仍有疑問?準備閱讀下篇!