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)
为什么这样的代码只出现在一次迭代中?为什么"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)