Котлин: Почему val b (Map) изменяется на протяжении итерации, даже если действия выполняются над другой переменной в цикле do-while? - PullRequest
0 голосов
/ 21 сентября 2019

Почему такой код встречается только в одной итерации?Почему «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 Ответ

0 голосов
/ 23 сентября 2019

Согласно комментарию @jsamol, в нем говорится: «Подобно Java, Kotlin никогда неявно копирует объекты при присваивании. Переменные всегда содержат ссылки на объекты, а при присваивании выражения переменной только копируется ссылка на объект, а не объектсам. "

Я изменил условие, чтобы я мог сравнивать целые числа, а не карты.Как это работает.

var a = mutableMapOf("z" to 1)

do {
    val b = a.size
    a["x"] = 2
} while (a.size != b)
...