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

发布于 2024-12-02 16:28:17 字数 200 浏览 0 评论 0原文

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

val a=Array(1,2,3,4,5)

案例1:

val b=a

案例2:

val b=a.clone()

I am reading scaladocs and just wondering difference between direct assignment and .clone method.

val a=Array(1,2,3,4,5)

case 1:

val b=a

case 2 :

val b=a.clone()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

翻了热茶 2024-12-09 16:28:17

考虑一下:

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 指向同一个对象。当对象发生变化时,双方都会看到变化。

另一方面,当您克隆数组时,您会生成一个具有相同内容的新数组。更改这个新数组不会更改旧数组。

Consider this:

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)

As you can see, when you do val b = a, then a and b point to the same object. When the object is changed, the change will be seen by both.

On the other hand, when you clone the array, you produce a new array with the same content. Changing this new array does not change the old one.

前事休说 2024-12-09 16:28:17

我相信情况 1 只是将 a 的引用设置为 b,而情况 2 创建一个全新的数组,该数组是 a 的副本并将值放入 b 中。

换句话说,如果您在 a 编辑 a 数组的情况下,b 数组也将被编辑,但情况 2 的情况并非如此

I believe case 1 just sets the reference of a to b while case 2 creates an entirely new array that is a copy of a and putting the value in b.

In other words if you in case a edit the a array the b array will also be edited this is not the case in case 2

追风人 2024-12-09 16:28:17

这是代码中的答案:

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

Here is an answer in code:

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
风和你 2024-12-09 16:28:17

在第一种情况下,两个引用都指向同一个对象,而在第二种情况下,创建了一个新对象,并且 a 和 b 不引用同一个对象。

In case 1, both reference leads to the same object while in the second case, a new object is created and a and b do not reference the same object.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文