总体来说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基础语法之 ==和===的区别相关推荐

  1. java文件的后缀.kt_移动端Kotlin 基础语法.kt 为后缀

    Kotlin 基础语法 Kotlin 文件以 .kt 为后缀. 包声明 代码文件的开头一般为包的声明: package com.runoob.main import java.util.* fun t ...

  2. Kotlin基础语法(上)

    文章目录 Kotlin基础语法(下) Kotlin基础语法(上) 输出Hello world!!! 变量与输出 kotlin常见数据类型 变量的取值范围 kotlin函数 kotlin布尔类型 kot ...

  3. Kotlin基础语法学习类和对象(一)

    类定义 Kotlin 类可以包含:构造函数和初始化代码块.函数.属性.内部类.对象声明. Kotlin 中使用关键字 class 声明类,后面紧跟类名: class Runoob { // 类名为 R ...

  4. Android kotlin基础语法

    1.继承类和实现接口 继承类是冒号连接,java是extends连接.实现接口是逗号连接,java是implements连接 class MainActivity : AppCompatActivit ...

  5. Kotlin 基础语法(四)

    Kotlin 文件以 .kt 为后缀. 包声明 代码文件的开头一般为包的声明: package com.runoob.mainimport java.util.*fun test() {} class ...

  6. Kotlin 基础语法(《第一行代码(第三版)》第二章读书笔记)

    资源来自<第一行代码>(第三版)第二章 网络试读: https://www.ituring.com.cn/book/tupubarticle/30209 以下为笔记 转存失败重新上传取消正 ...

  7. Kotlin学习(二)Kotlin基础语法

    学习一门语言,我总是会先学习一下基本的语法.因为并不急着应用Kotlin去开发项目,所以,还是有很多的时间去学习.今天,简单的总结一下Kotlin的基本语法. 一.函数 1.有参有返回值函数 fun ...

  8. Kotlin 基础语法

    Kotlin 文件以 .kt 为后缀. 包声明 代码文件的开头一般为包的声明: package com.runoob.mainimport java.util.*fun test() {} class ...

  9. Kotlin系列之基础语法

    标签: Kotlin      Kotlin基础语法 目录: 一.包的声明 二.函数的定义 三.常量和变量 四.注释 五.字符串模板 六.使用条件表达式 七.NULL检查机制 八.类型检测以及自动类型 ...

最新文章

  1. C++为什么空格无法输出_算法竞赛C++常用技巧——输入输出优化(防止TLE)
  2. 一起学Hadoop——Hadoop的前世今生
  3. 通过Runtime源码了解关联对象的实现
  4. springboot集成Swagger2接口文档
  5. 关于python_关于 Python
  6. 谈谈对IOC及DI的理解与思考
  7. 从Ant Build演进Gradle Build:导入Ant Build文件
  8. Handler post用法整理
  9. 【剑指offer】面试题53 - 1:在排序数组中查找数字 I(java)
  10. win7系统锁定计算机设置方法
  11. python 卡方检验_【技术】卡方检验及其Python实现
  12. [Java] 蓝桥杯BASIC-23 基础练习 芯片测试
  13. 使用PROJ将空间坐标点从WGS84坐标系转换到UTM坐标系
  14. 中国工程院院士李德毅:认知的三次革命,类脑的五条启发!
  15. 五个小时学会Asp连接access添加,删除,修改
  16. windowsGHO镜像系统winXPwin7win8win10正版下载
  17. 迅为RK3399开发板外接固态硬盘测试
  18. 东东助手显示无法连接服务器,《东东助手》模拟器常见问题及解决办法
  19. html 地址 点击召唤高德,HTML5创建高德地图
  20. 如何统计Android的代码行数

热门文章

  1. 172. 阶乘后的零 尾随零
  2. 『华为』 [行业要闻]华为VS思科:21世纪的第一场战争 。
  3. 怎样通过修改folder.htt来实现文件夹加密码
  4. java环境变量设置和切换版本
  5. 双线性插值与三线性插值
  6. html中正确给table加边框
  7. Spring4:AOP
  8. Linux下十大命令行下载工具
  9. Arduino温湿度监测与股票涨跌提醒
  10. [spark]spark资源分配