val b = a(a是数组)和val b = a.clone()之间有什么区别?

XT.*_*XT. 2 scala reference

我正在阅读scaladocs,只是想知道直接赋值和.clone方法之间的区别.

val a=Array(1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)

情况1:

val b=a
Run Code Online (Sandbox Code Playgroud)

案例2:

val b=a.clone()
Run Code Online (Sandbox Code Playgroud)

Dan*_*ral 13

考虑一下:

scala> val a=Array(1,2,3,4,5)
a: Array[Int] = Array(1, 2, 3, 4, 5)

scala> val b = a
b: Array[Int] = Array(1, 2, 3, 4, 5)

scala> val c = a.clone()
c: Array[Int] = Array(1, 2, 3, 4, 5)

scala> b(0) = 0

scala> c(1) = 1

scala> a
res2: Array[Int] = Array(0, 2, 3, 4, 5)

scala> b
res3: Array[Int] = Array(0, 2, 3, 4, 5)

scala> c
res4: Array[Int] = Array(1, 1, 3, 4, 5)
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,当你这样做val b = a的话a,并b指向同一个对象.更改对象后,两者都会看到更改.

另一方面,克隆数组时,会生成具有相同内容的新数组.更改此新阵列不会更改旧阵列.


Mat*_*son 5

我相信案例1只是将a的引用设置为b,而案例2创建了一个全新的数组,它是a的副本并将值放入b中.

换句话说,如果你编辑一个数组,那么b数组也将被编辑,情况2就不是这种情况