原文標題:Variables in Kotlin, differences with Java. var vs val (KAD 02)安全
做者:Antonio Leivathis
時間:Nov 28, 2016spa
原文連接:http://antonioleiva.com/variables-kotlin/線程
Kotlin系列課程的第二課:Kotlin中變量不一樣於Java: var 對val。code
在這第二章節中,咱們將瞭解Kotlin中變量是怎樣工做的,什麼是val和var,什麼時間使用它們。對象
我從這開始,是由於理解這部份內容對後續討論怎樣在類中建立「字段」時很是有用(還可瞭解它們不是字段)。blog
如Java那樣,只要在變量的範圍內執行代碼,Kotlin變量就能夠被賦值、修改,在程序中不一樣位置被使用。get
可是,咱們將聚焦在它與Java不一樣的方面。編譯器
在Java中也分可變與不可變(若是不但願變量被改變,可將變量說明爲final),可是在Kotlin中,更簡潔的、更經常使用的是:只要可能,在Kotlin中首選時不變值。it
事實上,在程序中大部分地方使用不可變的變量,可帶來不少益處,如:可預測的行爲和線程安全。
在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()嗎?這將在下一篇說明!
沒有基本類型,沒有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約定)和更清晰的、簡潔的代碼。
仍有疑問?準備閱讀下篇!