java val变量声明_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。
延伸阅读
java val变量声明_Kotlin 中 var 与 val 定义变量的区别,及使用场景相关推荐
- java val变量声明_Kotlin中变量不同于Java: var 对val(KAD 02)
原文标题:Variables in Kotlin, differences with Java. var vs val (KAD 02) 时间:Nov 28, 2016 原文链接:http://ant ...
- JavaScript中var、let和const的区别
一.前言 在ES6(ES2015)出现之前,JavaScript中声明变量就只有通过 var 关键字,函数声明是通过 function 关键字,而在ES6之后,声明的方式有 var . let . c ...
- mysql declare与set的区别_浅谈MySQL存储过程中declare和set定义变量的区别
在存储过程中常看到declare定义的变量和@set定义的变量.简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量. 1.declare定义的变量类似java类中的局部变量,仅 ...
- mysql存储过程set什么意思_浅谈MySQL存储过程中declare和set定义变量的区别
在存储过程中常看到declare定义的变量和@set定义的变量.简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量. 1.declare定义的变量类似java类中的局部变量,仅 ...
- java e.getmessage() null,浅谈Java异常的Exception e中的egetMessage()和toString()方法的区别...
Exception e中e的getMessage()和toString()方法的区别: 示例代码1: public class TestInfo { private static String str ...
- Kotlin中var和val的区别
var是一个可变变量,这是一个可以通过重新分配来更改为另一个值的变量.这种声明变量的方式和java中声明变量的方式一样. val是一个只读变量,这种声明变量的方式相当于java中的final变量.一个 ...
- char型变量声明java_java中变量的声明和变量的类型
1.变量的概念: 内存中的一个存储区域该区域有自己的名称(变量名)和类型(数据类型)Java中每个变量必须先声明,后使用该区域的数据可以在同一类型范围内不断变化 使用变量注意: 变量的作用域:一对{ ...
- macbook配置java环境变量_Mac系统中如何配置JDK环境变量?Mac中JDK环境变量配置教程...
Mac系统中如何配置JDK环境变量?在使用mac系统的电脑时,如何进行设置JDK环境变量呢?接下来的文章中小编将会带来详细的介绍,希望对您有所帮助. Mac中JDK环境变量配置教程 1.访问Oracl ...
- linux设置anaconda环境变量,在Linux中永久设置Anaconda环境变量的方法
[感谢:http://www.codesec.net/view/459539.html] 如果在安装Anaconda的过程中没有将安装路径添加到系统环境变量中,需要在安装后手工添加: 1.在终端输入$ ...
最新文章
- python第三天(dictionary应用)转
- Servlet 与 Ajax 交互一直报status=parsererror
- Intel® Nehalem/Westmere架构/微架构/流水线 (2) - 流水线概述
- ENVI-IDL基础学习(1)
- 编写程序:实现输出100以内质数的功能
- 苹果服务器文件夹共享权限设置,苹果设备如何访问 Windows 文件共享?
- latex图表中英文双标题的使用技巧
- H5+ API 设置手机状态栏颜色以及沉浸式状态栏
- 关于Cat,同轴,光纤等以太网电缆的所有信息
- Mooc视频字幕提取
- Python实现占用栅格地图的生成(Occupancy Grid Generation)
- hadoop集群搭建及易踩坑收录
- 静态库和动态库的制作使用与区别
- 修改so文件的关键方法
- 如何写论文中的引言?
- 文件比较 java 标红_如何用java输出word里红色的字体,
- first diary
- 数据库课程设计——图书管理管理系统(一)
- zynq 烧写W25Q256FV Flash步骤
- Windows Server 2012R2配置分层存储,实现廉价的桌面云存储方案
热门文章
- Oracle必备知识
- Qt5编程——word操作
- 华为5g鸿蒙麒麟,2019华为十大黑科技盘点麒麟9905G鸿蒙OS受重视
- fabric测试网络启动警告解决:Local fabric binaries and docker images are out of sync. This may cause problems.
- 银川成立“智慧城市”应急指挥中心
- 初学linux,遇到的问题
- Unity预制件Prefab Day04
- Mac专业音频后期制作软件:Davinci Resolve达芬奇17中文版
- 华侨大学学术期刊分类目录
- 数字IC设计工程师是做什么的?