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

文章目录

    看 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。

    延伸阅读

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式