假设我有一个功能:
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是怎么回事。
答案 0 :(得分:7)
TL; DR:这特定于JVM上的字符串,它们在池中进行管理,可以重复使用以节省内存
JVM在内部维护一个字符串池,这有助于节省常用字符串的空间。您可以执行java.lang.String("kotlin")
,即使用标准Java String
构造函数来绕过此技术,但是不建议您不要使用Kotlin映射类型kotlin.String
。
让我交叉点此线程:What is the Java string pool and how is "s" different from new String("s")?