看 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. python第三天(dictionary应用)转
  2. Servlet 与 Ajax 交互一直报status=parsererror
  3. Intel® Nehalem/Westmere架构/微架构/流水线 (2) - 流水线概述
  4. ENVI-IDL基础学习(1)
  5. 编写程序:实现输出100以内质数的功能
  6. 苹果服务器文件夹共享权限设置,苹果设备如何访问 Windows 文件共享?
  7. latex图表中英文双标题的使用技巧
  8. H5+ API 设置手机状态栏颜色以及沉浸式状态栏
  9. 关于Cat,同轴,光纤等以太网电缆的所有信息
  10. Mooc视频字幕提取
  11. Python实现占用栅格地图的生成(Occupancy Grid Generation)
  12. hadoop集群搭建及易踩坑收录
  13. 静态库和动态库的制作使用与区别
  14. 修改so文件的关键方法
  15. 如何写论文中的引言?
  16. 文件比较 java 标红_如何用java输出word里红色的字体,
  17. first diary
  18. 数据库课程设计——图书管理管理系统(一)
  19. zynq 烧写W25Q256FV Flash步骤
  20. Windows Server 2012R2配置分层存储,实现廉价的桌面云存储方案

热门文章

  1. Oracle必备知识
  2. Qt5编程——word操作
  3. 华为5g鸿蒙麒麟,2019华为十大黑科技盘点麒麟9905G鸿蒙OS受重视
  4. fabric测试网络启动警告解决:Local fabric binaries and docker images are out of sync. This may cause problems.
  5. 银川成立“智慧城市”应急指挥中心
  6. 初学linux,遇到的问题
  7. Unity预制件Prefab Day04
  8. Mac专业音频后期制作软件:Davinci Resolve达芬奇17中文版
  9. 华侨大学学术期刊分类目录
  10. 数字IC设计工程师是做什么的?