Kotlin平等表现出与预期不同的产出

Sho*_*jan 0 equality kotlin

假设我有一个函数:

 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
    }
Run Code Online (Sandbox Code Playgroud)

根据kotlin === a和b是不同的实例,所以我的预期输出是:

true
false
true
true
Run Code Online (Sandbox Code Playgroud)

但实际上显示:

true
true
true
true
Run Code Online (Sandbox Code Playgroud)

我不明白a === b是怎么回事。

s1m*_*nw1 7

TL; DR:这是特定于JVM上的字符串的,它们在池中进行管理,可以重复使用以节省内存


JVM在内部维护一个字符串池,这有助于节省常用字符串的空间。您可以java.lang.String("kotlin")使用标准Java String构造函数来绕过此技术,但是不建议您不要使用Kotlin映射类型kotlin.String

让我交叉点此线程:什么是Java字符串池?“ s”与新的String(“ s”)有何不同?