Kotlin: Почему val b (Map) изменяется во время итерации, даже если действия происходят над другим var a в цикле do-while?
Почему такой код встречается только на одной итерации? Почему "b" изменяется одновременно с "a" после присваивания до конца итерации?
Я сделал аналогичный код, где (a) и (b) - целые числа, тогда (b) не изменяется до следующей итерации. Почему по-другому ведет себя с картой?
var a = mutableMapOf("z" to 1)
do {
val b = a
a["x"] = 2
// why here b == a in the first iteration?
} while (a != b)
1 ответ
Решение
Согласно комментарию @jsamol, в нем говорится: "Подобно Java, Kotlin никогда неявно копирует объекты при назначении. Переменные всегда содержат ссылки на объекты, а присвоение выражения переменной копирует только ссылку на объект, а не сам объект".
Я изменил условие, чтобы сравнивать целые числа, а не карты. Как это устроено.
var a = mutableMapOf("z" to 1)
do {
val b = a.size
a["x"] = 2
} while (a.size != b)