Kotlin基础语法之 ==和===的区别
总体来说kotlin中==比较的是数值是否相等, 而===比较的是两个对象的地址是否相等, 见如下代码:
val a: Int = 999val b: Int? = aval c: Int? = aprintln(b == c) //trueprintln(b === c) //false
这个和java中运行结果是在意料之中, == 比较数值, 而===比较的是地址, 前者为true, 后者为false. 那么看下面这段代码的运行情况:
val a: Int = 999val b: Int = aval c: Int = aprintln(b == c) // trueprintln(b === c) // true
这段代码和第一段代码的区别就是Int和Int?的区别, 为什么===的运算结果会不一样呢? 不要急, 再看下面这段代码
val a: Int? = 999val b: Int? = aval c: Int? = aprintln(b == c) //trueprintln(b === c) //true
这段代码和第一段代码的区别就是第一行的Int?和Int的区别, 而运行出来的结果===也是true, 这是为什么呢?
下面这个就是对上述现象的最好的解释
注意一点: 在 java 平台上,数值被 JVM 虚拟机以字节码的方式物理存储的,除非我们需要做可空标识(比如说 Int?) 或者涉及泛型。在后者中数值是装箱的(参考http://www.kotlindoc.cn/Basics/Basic-Types.html 这个文章)。
也就是说如果我们使用的是val a : Int = 999, 这种方式, 其实a就是个数值, 不涉及装箱的问题, 也就是不是个对象, 而如果我们使用的是val a: Int? = 999, 这样的话, a是一个Int型对象, 涉及到装箱问题, 这样就很好解释为什么第一段代码的===是false, 因为a是数值, 而b, c是装箱后的对象, 而第二段代码a, b, c都是数值, 第三段代码a, b, c都是同一个对象
Kotlin基础语法之 ==和===的区别相关推荐
- java文件的后缀.kt_移动端Kotlin 基础语法.kt 为后缀
Kotlin 基础语法 Kotlin 文件以 .kt 为后缀. 包声明 代码文件的开头一般为包的声明: package com.runoob.main import java.util.* fun t ...
- Kotlin基础语法(上)
文章目录 Kotlin基础语法(下) Kotlin基础语法(上) 输出Hello world!!! 变量与输出 kotlin常见数据类型 变量的取值范围 kotlin函数 kotlin布尔类型 kot ...
- Kotlin基础语法学习类和对象(一)
类定义 Kotlin 类可以包含:构造函数和初始化代码块.函数.属性.内部类.对象声明. Kotlin 中使用关键字 class 声明类,后面紧跟类名: class Runoob { // 类名为 R ...
- Android kotlin基础语法
1.继承类和实现接口 继承类是冒号连接,java是extends连接.实现接口是逗号连接,java是implements连接 class MainActivity : AppCompatActivit ...
- Kotlin 基础语法(四)
Kotlin 文件以 .kt 为后缀. 包声明 代码文件的开头一般为包的声明: package com.runoob.mainimport java.util.*fun test() {} class ...
- Kotlin 基础语法(《第一行代码(第三版)》第二章读书笔记)
资源来自<第一行代码>(第三版)第二章 网络试读: https://www.ituring.com.cn/book/tupubarticle/30209 以下为笔记 转存失败重新上传取消正 ...
- Kotlin学习(二)Kotlin基础语法
学习一门语言,我总是会先学习一下基本的语法.因为并不急着应用Kotlin去开发项目,所以,还是有很多的时间去学习.今天,简单的总结一下Kotlin的基本语法. 一.函数 1.有参有返回值函数 fun ...
- Kotlin 基础语法
Kotlin 文件以 .kt 为后缀. 包声明 代码文件的开头一般为包的声明: package com.runoob.mainimport java.util.*fun test() {} class ...
- Kotlin系列之基础语法
标签: Kotlin Kotlin基础语法 目录: 一.包的声明 二.函数的定义 三.常量和变量 四.注释 五.字符串模板 六.使用条件表达式 七.NULL检查机制 八.类型检测以及自动类型 ...
最新文章
- C++为什么空格无法输出_算法竞赛C++常用技巧——输入输出优化(防止TLE)
- 一起学Hadoop——Hadoop的前世今生
- 通过Runtime源码了解关联对象的实现
- springboot集成Swagger2接口文档
- 关于python_关于 Python
- 谈谈对IOC及DI的理解与思考
- 从Ant Build演进Gradle Build:导入Ant Build文件
- Handler post用法整理
- 【剑指offer】面试题53 - 1:在排序数组中查找数字 I(java)
- win7系统锁定计算机设置方法
- python 卡方检验_【技术】卡方检验及其Python实现
- [Java] 蓝桥杯BASIC-23 基础练习 芯片测试
- 使用PROJ将空间坐标点从WGS84坐标系转换到UTM坐标系
- 中国工程院院士李德毅:认知的三次革命,类脑的五条启发!
- 五个小时学会Asp连接access添加,删除,修改
- windowsGHO镜像系统winXPwin7win8win10正版下载
- 迅为RK3399开发板外接固态硬盘测试
- 东东助手显示无法连接服务器,《东东助手》模拟器常见问题及解决办法
- html 地址 点击召唤高德,HTML5创建高德地图
- 如何统计Android的代码行数