Краткий ответ: ДА , они используют один и тот же адрес памяти.
Следующее описание применимо для Kotlin / JVM .Когда вы объявляете новую строку, за кулисами происходят некоторые интересные вещи.Это базовое объявление строки.Мы создаем новую строковую переменную с именем string1
и присваиваем ей значение:
var string1 = "hello"
Она будет выделять пространство в памяти для литерального значения привет .Эта область в памяти называется пул строковых констант .Это как пул строковых значений, которые доступны для других частей программы.Теперь, если вы создали другую переменную, скажем string2
, и ТАКЖЕ присвоили ей значение привет Kotlin повторно использует значение, которое уже находится в пуле.Пул строковых констант находится внутри раздела памяти и называется heap .Это часть памяти, которая используется для операций во время выполнения, работы с классами и объектами.Думайте о куче, как о клочке садовой почвы, из которой вы можете легко взять грязь и растения, когда вы сажаете сад.Котлин размещает эти новые объекты там.Если вы создадите еще сотню объектов, Kotlin создаст еще сотню литералов поверх кучи.
Я бы использовал Ссылочное равенство (===) только для проверки того, что переменные указывают на одно и то жеобъект или нет.