像这样的东西按预期工作:
Dim test(1) As Integer
test = {1, 2}
Dim test2(1) As Integer
test2 = test
test = {3, 4}
test2 = {4, 5}
但有时在将一个数组设置为等于另一个数组后,对一个数组的更改将影响另一个数组。这迫使我在任何地方添加.clone
。这是为什么?
答案 0 :(得分:3)
代码test2 = test
使两个变量test2
和test
指向同一个数组。如果您对数组进行了任何更改,如:
test2(1) = 0
test(0) = 99
然后,test
和test2
都可以看到这些更改,因为它们是相同的数组。
但是,当你这样做时:
test = {3, 4}
你没有改变现有的阵列;你正在创建一个新的并使test
指向它。它的工作方式与test2 = test
的工作方式相同 - 您重定向变量以指向内存中的其他数组。
那么你又回到了两个独立的数组,其中一个数据的变化没有反映在另一个数组中。
答案 1 :(得分:0)
test2 = test
这意味着这些对象引用引用同一个对象。因此,如果您更改test
,那么它也会更改test2
。