Kotlin:即使在 do-while 循环中对另一个 var a 执行操作,为什么 val b (Map) 在迭代中发生变化?

Kotlin: Why does val b (Map) change over the iteration even though actions occur over another var a in do-while loop?

为什么这样的代码只出现在一次迭代中?为什么"b"在迭代结束前赋值后和"a"同时变化?

我做了一个类似的代码,其中 (a) 和 (b) 是整数,然后 (b) 在下一次迭代之前不会改变。为什么它与 Map 的行为不同?

var a = mutableMapOf("z" to 1)

do {
    val b = a
    a["x"] = 2
    // why here b == a in the first iteration?
} while (a != b)

根据@jsamol 的评论,它说: "Similar to Java, Kotlin never implicitly copies objects on assignment. Variables always hold references to objects, and assigning an expression to a variable only copies a reference to the object, not the object itself."

我已经更改了条件,所以我可以比较整数,而不是地图。它是如何工作的。

var a = mutableMapOf("z" to 1)

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