Равенство Котлина показывает результат, отличный от ожидаемого - PullRequest
0 голосов
/ 08 марта 2019

Предположим, у меня есть функция:

 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 верно.

1 Ответ

7 голосов
/ 08 марта 2019

TL; DR: это характерно для строк в JVM, они управляются в пуле и могут использоваться повторно для экономии памяти


JVM поддерживает внутренний пул строк, что помогает экономить место для часто используемых строк. Вы можете сделать java.lang.String("kotlin"), т. Е. Используя стандартный конструктор Java String, чтобы обойти эту технику, но не рекомендуется не использовать тип отображения Kotlin kotlin.String.

Позвольте мне просто пересечь эту тему: Что такое пул строк Java и чем "s" отличается от новой строки ("s")?

...