Учтите это:
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)
Как видите, когда вы делаете val b = a
, a
и b
указывают на один и тот же объект. Когда объект изменяется, изменение будет видно обоим.
С другой стороны, когда вы клонируете массив, вы создаете новый массив с тем же содержимым. Изменение этого нового массива не меняет старый.