我有以下代码:
val copyA = a.clone
copyA(0)(0) = 1
println("a(0)(0): " + a(0)(0))
打印:
a(0)(0): 1
如果我将其更改为:
val copyA = a.clone
println("a(0)(0): " + a(0)(0))
打印:
a(0)(0): 0
那么为什么a
会因copyA
的变化而受到影响?
如何才能使copyA
中的更改不影响a
?
答案 0 :(得分:3)
变异克隆的1D数组实例不会更改原始实例,反之亦然,
例如,
AvgLife
变异scala> val original = Array(100, 200)
original: Array[Int] = Array(100, 200)
scala> val cloned = original.clone
cloned: Array[Int] = Array(100, 200)
数组不会影响cloned
数组,
original
变异scala> cloned(0) = 5000
scala> original(0) //still the same value
res36: Int = 100
数组不会影响original
数组,
cloned
但它与2D数组有所不同,因为里面的每个数组都是一个ref并且必须进行深度克隆
scala> original(0) = 8888
scala> cloned(0) // still the same
res38: Int = 5000
深度克隆2D数组
scala> val original = Array.ofDim[Int](2,2)
original: Array[Array[Int]] = Array(Array(0, 0), Array(0, 0))
scala> original.foreach {col => println(col)}
[I@745e24c4
[I@42c6563f
答案 1 :(得分:2)
你克隆了数组。你没有克隆 in 数组中的任何内容。
在您的代码中,您没有操纵数组。您正在从数组中获取一个元素并操纵该对象。这里的数组完全不相关。