2011-09-01 149 views

回答

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) 

正如你所看到的,當你做val b = a,然後ab指向同一個對象。當對象改變時,改變將被兩者看到。

另一方面,克隆數組時,會生成一個具有相同內容的新數組。更改這個新陣列不會改變舊陣列。

2

在情況1中,而在第二種情況下,創建一新的對象都引用導致相同的對象和a和b不引用同一個對象。

5

我相信案例1只是設置了a的引用,而案例2創建了一個全新的數組,它是a的一個副本,並將值放入b中。

換句話說,如果你萬一編輯一個陣列B排列也將被編輯這不是案件的情況下2

+0

謝謝你Mattias –

3

這裏是代碼的答案:

scala> val a = Array(1,2,3,4,5) 
scala> a.hashCode() 
res12: Int = 1382155266 

scala> val b = a 
scala> b.hashCode() 
res13: Int = 1382155266 

scala> val c = a.clone() 
scala> c.hashCode() 
res14: Int = 2062756135 

scala> a eq b 
res15: Boolean = true 

scala> a eq c 
res16: Boolean = false 

scala> b eq c 
res17: Boolean = false 
+0

很好的答案,Thx! –

相關問題