0

为什么这样的代码只出现在一次迭代中?为什么在迭代结束前赋值后“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)
4

1 回答 1

0

根据@jsamol 的评论,它说:“与 Java 类似,Kotlin 永远不会在赋值时隐式复制对象。变量总是包含对对象的引用,将表达式分配给变量只会复制对对象的引用,而不是对象本身。”

我改变了条件,所以我可以比较整数,而不是地图。这个怎么运作。

var a = mutableMapOf("z" to 1)

do {
    val b = a.size
    a["x"] = 2
} while (a.size != b)
于 2019-09-23T05:37:50.047 回答