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

更新日期: 2019-12-08 阅读次数: 1540 字数: 471 分类: Kotlin

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

  • var 定义的变量可以被再次赋值。var 是 variable 的缩写。
  • val 定义的变量不可以被再次赋值,即引用不可变。val 大概是 value 的缩写。类似于 Java 和 Dart 中的 final 关键字

测试代码:

>>> 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 实例化时

  • val 实例化的对象,其 var 属性还可以进行更改;但是不可以对实例化的对象再赋值
  • var 实例化的对象没有任何限制
>>> 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。

爱评论不评论

近期节日

2020年07月22日 大暑
2020年07月30日 非洲妇女日
2020年08月01日 八一建军节
2020年08月06日 国际电影节
2020年08月07日 立秋
2020年08月15日 日本投降日
2020年08月22日 处暑
2020年08月25日 七夕
2020年09月02日 中元节
2020年09月03日 抗日胜利纪念日
2020年09月07日 白露
2020年09月08日 国际扫盲日
查看更多节日