原文标题: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约定)和更清晰的、简洁的代码。
仍有疑问?准备阅读下篇!