Kotlin中val和var的区别
变量可以很简单地定义成可变(var)和不可变(val)的变量。这个与Java中使用的final很相似。但是不可变在Kotlin(和其它很多现代语言)中是一个很重要的概念。
一个不可变对象意味着它在实例化之后就不能再去改变它的状态了。如果你需要一个这个对象修改之后的版本,那就会再创建一个新的对象。这个让编程更加具有健壮性和预估性。在Java中,大部分的对象是可变的,那就意味着任何可以访问它这个对象的代码都可以去修改它,从而影响整个程序的其它地方。
Kotlin中有两个关键字定义变量,这两个关键字外形看着差别很小就只差了一个字母,但实际差别很大的。
var是一个可变变量,这是一个可以通过重新分配来更改为另一个值的变量。这种声明变量的方式和Java中声明变量的方式一样。
val是一个只读变量,这种声明变量的方式相当于java中的final变量。一个val创建的时候必须初始化,因为以后不能被改变。
不可变对象也可以说是线程安全的,因为它们无法去改变,也不需要去定义访问控制,因为所有线程访问到的对象都是同一个。所以在Kotlin中,如果我们想使用不可变性,我们编码时思考的方式需要有一些改变。一个重要的概念是:尽可能地使用val。除了个别情况(特别是在Android中,有很多类我们是不会去直接调用构造函数的),大多数时候是可以的。如果使用var一般都需要判空
val s = "Example" // A String
val i = 23 // An Int
val actionBar = supportActionBar // An ActionBar in an Activity context
var name: String? = null //可变变量一般要注意使用安全操作符? ,使用时都要加上?
val length = name?.length
Kotlin中val和var的区别相关推荐
- Kotlin中also与apply的区别
Kotlin中also与apply的区别 also和apply的差别主要存在于lambda表达式内context表示方式 also是通过传入的参数(it)来表示 apply是通过this来表示 als ...
- JS中 let 和var的区别
JS中let和var 的区别 简单介绍let var的常见变量提升 ES6可以用let定义块级作用域变量 let配合for循环的独特应用 let没有变量提升与暂时性死区 let变量不能重复声明 简单介 ...
- uniapp 获取到js文件var一个变量怎么获取到这个变量值_浅析Js中const,let,var的区别及作用域...
理解:let变量的作用域只能在当前函数中 js中const,let,var的区别及作用域_lianzhang861的博客-CSDN博客blog.csdn.net 全局作用域中,用 const 和 l ...
- javascript中let和var的区别
let是es6中新增命令,也是用来声明变量的,可能很多小伙伴都像我一样,定义变量的时候都会用var而很少用到let,那么,let和var到底有什么区别呢? let和var的区别体现在作用域上.var的 ...
- 前端中 let 和 var 的区别
作用域不同 var是函数作用域,let是块作用域. 在函数中声明了var,整个函数内都是有效的,比如说在for循环内定义的一个var变量,实际上其在for循环以外也是可以访问的 而let由于是块作用域 ...
- val和var的区别
美图欣赏: 一.背景 学习过程中,会有很多小的并且容易混淆知识点,因此会把它记录下来. 二.val(value)和var(variable)的区别 基本语法: var|val 变量名 : 变量类型 = ...
- js中let const var的区别
1.var声明的变量会存在变量提升,而let 和 const的变量不会存在变量提升 也就是var声明的变量会被提升到他所在的作用域顶端去 // var: console.log(a) // 打印为 ' ...
- typescript 中 let和var的区别
1,var可以声明同名变量,但let不可以: var a = 0; var a = 1; // 不会报错 let b= 0; let b = 1; // 会报错 var的作用域是函数作用域,在内层循 ...
- Scala变量定义val与var的区别
Scala有两种变量:var和val.val类似与Java种的final变量,一旦初始化了,就不能再被赋值.相反,var可以在生命周期内被多次赋值! 同样的代码,我把val改成var编译就没有问题了;
最新文章
- 10参数_小米10和oppofindx2哪个好用 参数配置对比性能评测
- 关于收到部分还款SAP系统两种处理方法的说明和比较
- 李秀计算机文化基础,计算机文化基础(李秀)绪论.pptx
- CSS3 linear-gradient实现三角形
- MySQL巧妙利用help_topic表把以逗号分隔的字符串转换成行
- IoT:BLE4.0教程一 蓝牙协议连接过程与广播分析
- 多项式函数插值:计算基本理论
- ❤ ❤响应式小米官网源码!!!(js+css+html)❤ ❤
- OBD柴油货车环保在线检测终端助力机动车尾气监管与时俱进
- 【npm】tunneling socket could not be established
- 违反协议 oracle,Oracle增加表字段导致“违反协议”异常
- React中的Hooks是什么?
- Opencv4.0学习记录(Day21 视频文件摄像头使用)
- 微信分享的app下载链接无法打开,显示已停止访问该网页的原因和解决方案
- 天敏VC4000视频开发设计方案
- npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree
- 微信小程序——背景音乐播放
- 如何把谷歌浏览器内核设为百度?
- 常用的正则表达式校验
- android ios安裝,麻花影视最全安装途径 — 支持Android和iOS