나는 스칼라 독을 읽고 있는데 직접 할당과 .clone 방법의 차이점을 궁금해한다.val b = a (a는 Array)와 val b = a.clone()의 차이점은 무엇입니까?
val a=Array(1,2,3,4,5)
사례 1 :
val b=a
케이스 (2) : 케이스 (1)에
val b=a.clone()
나는 스칼라 독을 읽고 있는데 직접 할당과 .clone 방법의 차이점을 궁금해한다.val b = a (a는 Array)와 val b = a.clone()의 차이점은 무엇입니까?
val a=Array(1,2,3,4,5)
사례 1 :
val b=a
케이스 (2) : 케이스 (1)에
val b=a.clone()
고려 이 :
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
점을 수행 할 때. 개체가 변경되면 변경 내용이 두 개체 모두에서 표시됩니다.
반면에 배열을 복제하면 동일한 내용의 새 배열이 생성됩니다. 이 새로운 배열을 변경해도 이전 배열은 변경되지 않습니다.
두 번째 경우, 새로운 오브젝트가 생성 될 때, 두 기준이 동일한 개체에 이르게 a와 b는 같은 객체를 참조하지 않습니다.
케이스 1은 b에 대한 참조를 설정하고 케이스 2는 a의 사본 인 완전히 새로운 어레이를 만들고 b에 값을 넣을 것이라고 생각합니다. 즉
ㄱ 배열이 여기 2
코드에 대답 경우에는 그렇지 않다 편집 될 배열 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
위대한 답변, Thx! –
감사합니다. Mattias –