Kotlin 等式显示与预期不同的输出
Kotlin equality showing different output than expectation
假设我有一个函数:
fun equality() {
var a = "kotlin"
var b = "kotlin"
var c = a
println(a==b) //true
println(a===b) //false
println(a==c) //true
println(a===c) //true
}
根据 kotlin === a 和 b 是不同的实例,所以我的预期输出是:
true
false
true
true
但实际显示:
true
true
true
true
我不明白 a===b 是怎么回事。
TL;DR: 这是 JVM 上的字符串特有的,它们在池中进行管理,可以重复使用以节省内存
JVM 内部维护了一个字符串池,有助于保存 space 常用字符串。您可以 java.lang.String("kotlin")
,即使用标准 Java String
构造函数来绕过此技术,但不建议不要使用 Kotlin 映射类型 kotlin.String
.
让我交叉发布这个帖子:What is the Java string pool and how is "s" different from new String("s")?
假设我有一个函数:
fun equality() {
var a = "kotlin"
var b = "kotlin"
var c = a
println(a==b) //true
println(a===b) //false
println(a==c) //true
println(a===c) //true
}
根据 kotlin === a 和 b 是不同的实例,所以我的预期输出是:
true
false
true
true
但实际显示:
true
true
true
true
我不明白 a===b 是怎么回事。
TL;DR: 这是 JVM 上的字符串特有的,它们在池中进行管理,可以重复使用以节省内存
JVM 内部维护了一个字符串池,有助于保存 space 常用字符串。您可以 java.lang.String("kotlin")
,即使用标准 Java String
构造函数来绕过此技术,但不建议不要使用 Kotlin 映射类型 kotlin.String
.
让我交叉发布这个帖子:What is the Java string pool and how is "s" different from new String("s")?