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

延伸阅读

java val变量声明_Kotlin 中 var 与 val 定义变量的区别,及使用场景相关推荐

  1. java val变量声明_Kotlin中变量不同于Java: var 对val(KAD 02)

    原文标题:Variables in Kotlin, differences with Java. var vs val (KAD 02) 时间:Nov 28, 2016 原文链接:http://ant ...

  2. JavaScript中var、let和const的区别

    一.前言 在ES6(ES2015)出现之前,JavaScript中声明变量就只有通过 var 关键字,函数声明是通过 function 关键字,而在ES6之后,声明的方式有 var . let . c ...

  3. mysql declare与set的区别_浅谈MySQL存储过程中declare和set定义变量的区别

    在存储过程中常看到declare定义的变量和@set定义的变量.简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量. 1.declare定义的变量类似java类中的局部变量,仅 ...

  4. mysql存储过程set什么意思_浅谈MySQL存储过程中declare和set定义变量的区别

    在存储过程中常看到declare定义的变量和@set定义的变量.简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量. 1.declare定义的变量类似java类中的局部变量,仅 ...

  5. java e.getmessage() null,浅谈Java异常的Exception e中的egetMessage()和toString()方法的区别...

    Exception e中e的getMessage()和toString()方法的区别: 示例代码1: public class TestInfo { private static String str ...

  6. Kotlin中var和val的区别

    var是一个可变变量,这是一个可以通过重新分配来更改为另一个值的变量.这种声明变量的方式和java中声明变量的方式一样. val是一个只读变量,这种声明变量的方式相当于java中的final变量.一个 ...

  7. char型变量声明java_java中变量的声明和变量的类型

    1.变量的概念: 内存中的一个存储区域该区域有自己的名称(变量名)和类型(数据类型)Java中每个变量必须先声明,后使用该区域的数据可以在同一类型范围内不断变化 使用变量注意: 变量的作用域:一对{ ...

  8. macbook配置java环境变量_Mac系统中如何配置JDK环境变量?Mac中JDK环境变量配置教程...

    Mac系统中如何配置JDK环境变量?在使用mac系统的电脑时,如何进行设置JDK环境变量呢?接下来的文章中小编将会带来详细的介绍,希望对您有所帮助. Mac中JDK环境变量配置教程 1.访问Oracl ...

  9. linux设置anaconda环境变量,在Linux中永久设置Anaconda环境变量的方法

    [感谢:http://www.codesec.net/view/459539.html] 如果在安装Anaconda的过程中没有将安装路径添加到系统环境变量中,需要在安装后手工添加: 1.在终端输入$ ...

最新文章

  1. combus通讯_Vue兄弟组件通信Bus传值--小案例
  2. 12.oauth密码模式identity server4实现
  3. PAT (Advanced Level) 1140~1143:1140模拟 1141模拟 1142暴力 1143 BST+LCA
  4. chrome vue.js插件文档_神级宝库!GitHub 标星 1.2w+,Chrome 最天秀的插件都在这里啦!...
  5. 【算法】CRC 循环冗余校验
  6. 【ElasticSearch】es 面试题 视频 笔记
  7. sign签名算法一致算法-.net、java、golang
  8. 网站被国外IP攻击 禁止海外IP访问网站的解决办法
  9. 封装0805跟0603有什么区别,只存在大小的区别么???
  10. LimeSDR 中文教程 (一)
  11. 如何计算虚拟化vcpu_【科普】CPU和内存虚拟化
  12. 北大AI公开课 第一讲
  13. Android游戏开发教程
  14. eel+html 2 exe
  15. 用Node.js实现一个HTTP服务器程序(文件服务器)
  16. 计算机没有机械硬盘了,到底有没有必要给笔记本加机械硬盘
  17. c语言程序设计教程这本书,C语言程序设计教程资料(20201209225632).pdf
  18. 这些坑别踩!游戏随机地图生成开发经验分享
  19. UE4中的世界光照如何设置?
  20. 通达信量化API接口调用说明

热门文章

  1. 自动化立体库能力分析——堆垛机(单深单货位Case1)
  2. Android之发送短信和接收验证码
  3. Spark内存管理-UnifiedMemoryManager和StaticMemoryManager
  4. 电化学储能 | 基于ARM核心板实现的BMS方案
  5. string 中的maketrans和translate
  6. adb命令判断键盘显示
  7. 中国BBS社区100强(前三名)
  8. 站长号社区友情链接交换区改版中
  9. algodoo是什么意思_�教学创新-中国大学mooc-试题题目及答案
  10. 显示某日期为星期几的Excel函数公式