Kotlin 中 var 与 val 定义变量的区别,及使用场景

发布时间: 2019-11-27 13:49:17 作者: 大象笔记

看 Kotlin 项目示例代码中,经常出现 var / val 定义变量的情况。于是查了一下两者的区别:

测试代码:

>>> var a: Int = 1
>>> a
res2: kotlin.Int = 1
>>> a = 2
>>> a
res4: kotlin.Int = 2

>>> val b: Int = 1
>>> b
res6: kotlin.Int = 1
>>> b = 2
error: val cannot be reassigned
b = 2
^

当对象使用 val 实例化时

>>> class Language() {
...     var name: String = ""
... }
>>> var l = Language("Kotlin")
>>> l.name
res31: kotlin.String = Kotlin
>>> l.name = "Java"
>>> l.name
res33: kotlin.String = Java
>>> l = Language("Java")
>>>
>>> val l2 = Language("Java")
>>> l2.name
res40: kotlin.String = Java
>>> l2.name = "Kotlin"
>>> l2 = Language("Kotlin")
error: val cannot be reassigned
l2 = Language("Kotlin")
^
>>>

val 的使用场景

了解了 var 与 val 的区别之后,立即就产生了一个疑问,“何时应该使用 val?”

一开始我也觉得这是脱裤子放屁式的啰嗦行为,但是看了 kotlin 的一些示例代码之后,感觉还是有一定意义的。

举个例子,我现在定义一个 Button 对象,这个对象指向 layout 中的一个 button,这种情况下使用 val 就有实战意义了,因为这个 Button 变量理论上是不应该再指向其他 button 了,能很好的规避乱赋值的情况;而且还不影响修改 Button 的属性。

所以,原则应该是,尽量使用 val。

延伸阅读

我是一名山东烟台的开发者,联系作者