val b=a (a 是一个数组)和 val b=a.clone() 有什么区别?
我正在阅读 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
考虑一下:
正如您所看到的,当您执行
val b = a
时,a
和b
指向同一个对象。当对象发生变化时,双方都会看到变化。另一方面,当您克隆数组时,您会生成一个具有相同内容的新数组。更改这个新数组不会更改旧数组。
Consider this:
As you can see, when you do
val b = a
, thena
andb
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.
我相信情况 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
这是代码中的答案:
Here is an answer in code:
在第一种情况下,两个引用都指向同一个对象,而在第二种情况下,创建了一个新对象,并且 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.