2011-09-01 3 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 다음 a와 같은 객체에 b 점을 수행 할 때. 개체가 변경되면 변경 내용이 두 개체 모두에서 표시됩니다.

반면에 배열을 복제하면 동일한 내용의 새 배열이 생성됩니다. 이 새로운 배열을 변경해도 이전 배열은 변경되지 않습니다.

2

두 번째 경우, 새로운 오브젝트가 생성 될 때, 두 기준이 동일한 개체에 이르게 a와 b는 같은 객체를 참조하지 않습니다.

5

케이스 1은 b에 대한 참조를 설정하고 케이스 2는 a의 사본 인 완전히 새로운 어레이를 만들고 b에 값을 넣을 것이라고 생각합니다. 즉

ㄱ 배열이 여기 2

+0

감사합니다. Mattias –

3

코드에 대답 경우에는 그렇지 않다 편집 될 배열 A를 편집하는 경우에 당신이 경우 :

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! –