Kotlin平等显示出不同于预期的输出

问题描述 投票:0回答:1

假设我有一个功能:

 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

我无法理解=== b是如何真实的。

kotlin equality
1个回答
7
投票

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


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

让我直截了当地说:What is the Java string pool and how is "s" different from new String("s")?

© www.soinside.com 2019 - 2024. All rights reserved.