Kotlin 运算符 - == 运算符与 === 运算符

== 运算符

1、基本介绍
  • == 运算符比较两个对象的内容是否相等,相当于 Java 的 equals 方法
2、演示
  1. 基本数据类型
kotlin 复制代码
val num1 = 1
val num2 = 1
val num3 = num1

println(num1 == num2)
println(num1 == num3)
复制代码
# 输出结果

true
true
  1. 还是基本数据类型
kotlin 复制代码
val n1 = 1000
val n2 = 1000
val n3 = n1

println(n1 == n2)
println(n1 == n3)
复制代码
# 输出结果

true
true
  1. 装箱的基本数据类型,在池化范围内
kotlin 复制代码
val num1: Int? = 1
val num2: Int? = 1
val num3: Int? = num1

println(num1 == num2)
println(num1 == num3)
复制代码
# 输出结果

true
true
  1. 装箱的基本数据类型,在池化范围内外
kotlin 复制代码
val n1: Int? = 1000
val n2: Int? = 1000
val n3: Int? = n1

println(n1 == n2)
println(n1 == n3)
复制代码
# 输出结果

true
true
  1. 字符串类型
kotlin 复制代码
val a = "Hello"
val b = "Hello"
val c = a

println(a == b)
println(a == c)
复制代码
# 输出结果

true
true
  1. 集合类型
kotlin 复制代码
val list1 = listOf(1, 2, 3)
val list2 = listOf(1, 2, 3)
val list3 = list1

println(list1 == list2)
println(list1 == list3)
复制代码
# 输出结果

true
true

=== 运算符

1、基本介绍
  • === 运算符比较两个引用是否指向同一个对象实例,当于 Java 的 == 运算符
2、演示
  1. 基本数据类型,=== 运算符相当于 == 运算符
kotlin 复制代码
val num1 = 1
val num2 = 1
val num3 = num1

println(num1 === num2)
println(num1 === num3)
复制代码
# 输出结果

true
true
  1. 还是基本数据类型,=== 运算符相当于 == 运算符
kotlin 复制代码
val n1 = 1000
val n2 = 1000
val n3 = n1

println(n1 === n2)
println(n1 === n3)
复制代码
# 输出结果

true
true
  1. 装箱的基本数据类型,在池化范围内
kotlin 复制代码
val num1: Int? = 1
val num2: Int? = 1
val num3: Int? = num1

println(num1 === num2)
println(num1 === num3)
复制代码
# 输出结果

true
true
  1. 装箱的基本数据类型,在池化范围内外
kotlin 复制代码
val n1: Int? = 1000
val n2: Int? = 1000
val n3: Int? = n1

println(n1 === n2)
println(n1 === n3)
复制代码
# 输出结果

false
true
  1. 字符串类型,受字符串池化的影响
kotlin 复制代码
val a = "Hello"
val b = "Hello"
val c = a

println(a === b)
println(a === c)
复制代码
# 输出结果

true
true
  1. 集合类型
kotlin 复制代码
val list1 = listOf(1, 2, 3)
val list2 = listOf(1, 2, 3)
val list3 = list1

println(list1 === list2)
println(list1 === list3)
复制代码
# 输出结果

false
true

字符串池化的影响

1、观察记录 1
  1. 字面量 vs 字面量
比较行为 比较结果
== 比较 值相等
=== 比较 引用相等,字符串池化
kotlin 复制代码
val a = "Hello"
val b = "Hello"

println(a == b)
println(a === b)
复制代码
# 输出结果

true
true
  1. 字面量 vs new String
比较行为 比较结果
== 比较 值相等
=== 比较 引用不相等,b 是新对象
kotlin 复制代码
val a = "Hello"
val b = String("Hello".toCharArray())

println(a == b)
println(a === b)
复制代码
# 输出结果

true
false
  1. 字面量 vs 运行时拼接
比较行为 比较结果
== 比较 值相等
=== 比较 引用不相等,运行时创建新对象
kotlin 复制代码
val a = "Hello"
val b_part_1 = "Hel"
val b_part_2 = "lo"
val b = b_part_1 + b_part_2

println(a == b)
println(a === b)
复制代码
# 输出结果

true
false
  1. 字面量 vs 编译时拼接
比较行为 比较结果
== 比较 值相等
=== 比较 引用相等,译时优化,加入字符串池
kotlin 复制代码
val a = "Hello"
val b = "Hel" + "lo"

println(a == b)
println(a === b)
复制代码
# 输出结果

true
true
2、观察记录 2
  1. new String vs 字面量
比较行为 比较结果
== 比较 值相等
=== 比较 引用不相等,a 是新对象
kotlin 复制代码
val a = String("Hello".toCharArray())
val b = "Hello"

println(a == b)
println(a === b)
复制代码
# 输出结果

true
false
  1. new String vs new String
比较行为 比较结果
== 比较 值相等
=== 比较 引用不相等,两个独立对象
kotlin 复制代码
val a = String("Hello".toCharArray())
val b = String("Hello".toCharArray())

println(a == b)
println(a === b)
复制代码
# 输出结果

true
false
  1. new String vs 运行时拼接
比较行为 比较结果
== 比较 值相等
=== 比较 引用不相等,两个独立对象
kotlin 复制代码
val a = String("Hello".toCharArray())
val b_part_1 = "Hel"
val b_part_2 = "lo"
val b = b_part_1 + b_part_2

println(a == b)
println(a === b)
复制代码
# 输出结果

true
false
  1. new String vs 编译时拼接
比较行为 比较结果
== 比较 值相等
=== 比较 引用不相等,a 是新对象
kotlin 复制代码
val a = String("Hello".toCharArray())
val b = "Hel" + "lo"

println(a == b)
println(a === b)
复制代码
# 输出结果

true
false
相关推荐
mldong3 小时前
引擎从不发一条消息:jeeflow 的两类扩展点与消息模块的分工
java·架构
君顾14 小时前
智慧零售实战指南:从技术架构到落地方案全解析
java·开发语言·零售
南棱笑笑生4 小时前
20260904实测给飞凌OK3576-C开发板刷入Rockchip原厂的IMG固件【使用飞凌的DTS】切换串口波特率为1.5Mbps
c语言·开发语言·rockchip
zhanghe6874 小时前
es的密码带有特殊字符,导出
java
平头哥技术团队4 小时前
Day 10 | 工欲善其事:VS Code 配置与项目归档
android·开发语言·前端·javascript·html·交互
pnoker4 小时前
IoT DC3 概念解读:把设备抽象成一套语义模板——位号、指令、事件与面向智能体的设备建模
java·人工智能·物联网·iot·dc3
乌萨奇也要立志学C++4 小时前
【洛谷】kmp算法
开发语言·算法
my_realmy4 小时前
Java SE 基础学习笔记(一):面向对象、继承多态、抽象接口与异常(JDK 8)
java·多线程·并发··生产者消费者模式
传奇开心果编程5 小时前
【Rust入门知识点学与练】第4课:条件判断 if / else
开发语言·学习·rust
m0_380743875 小时前
给 Claude API 调用补上超时重试和错误分类
开发语言·人工智能·php