Kotlin中變量不一樣於Java: var 對val(KAD 02)

原文標題: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

 

Kotlin變量

如Java那樣,只要在變量的範圍內執行代碼,Kotlin變量就能夠被賦值、修改,在程序中不一樣位置被使用。get

 

可是,咱們將聚焦在它與Java不一樣的方面。編譯器

 

  • 變量分可變的和不可變的

在Java中也分可變與不可變(若是不但願變量被改變,可將變量說明爲final),可是在Kotlin中,更簡潔的、更經常使用的是:只要可能,Kotlin中首選時不變值it

 

事實上,在程序中大部分地方使用不可變的變量,可帶來不少益處,如:可預測的行爲和線程安全。

 

  • 用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約定)和更清晰的簡潔的代碼

 

仍有疑問?準備閱讀下篇!

相關文章
相關標籤/搜索