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