这是引用类型的实例变量吗?
本文关键字:变量 实例 引用类型 | 更新日期: 2023-09-27 18:30:31
我真正想知道的是这段代码:
arrInt .....是一个整数数组,并且
listArr()...是整数数组的动态列表
arrInt = {1, 2}
listArr.add(arrInt)
arrInt = {3, 4}
listArr.add(arrInt)
结果:
listArr(0) = {1, 2}
listArr(1) = {3, 4}
虽然我确定结果将是:
listArr(0) = {3, 4}
listArr(1) = {3, 4}
这表明 listArr 的每个元素都是一个强类型数组,它是 arrInt
的实例化副本而不是对 arrInt 的引用,也不是对 arrInt 的引用,因此,您可能会认为这是一个幼稚的查询,~>List
List 的所有元素都是作为对象的副本创建的吗?
不,他们不是。您正在创建新数组,而不是修改相同的数组。
arrInt = {3, 4}
是arrInt = new [] {3, 4}
的句法糖,这是arrInt = new int[] {3, 4}
的句法糖。您现在能看到新的阵列分配吗?
要得到
listArr(0) = {3, 4}
listArr(1) = {3, 4}
您需要更改初始数组的内容:
arrInt = {1, 2};
listArr.add(arrInt);
arrInt[0] = 3;
arrInt[1] = 4;
listArr.add(arrInt);
这将导致 listArr[0]
和 listArr[1]
中的 int 值相同。
如果没有长时间的对话,实际上不可能确定这一系列陈述的哪一部分让你感到困惑。但在我看来,这些操作的关键方面可能是:当语句listArr.Add(arrInt);
被执行时,添加到列表中的东西是对arrInt
引用的对象的引用,而不是你似乎认为的变量arrInt
本身。
语句完成后,列表中的元素与变量 arrInt
没有任何联系。该变量包含一个值,该值是对数组{ 1, 2 }
的引用。当你执行listArr.Add(arrInt);
时,添加到列表中的东西是变量包含的值,即对该数组的引用。
当你给变量arrInt
赋值一个新值时,即引用一个完全不同的数组{ 3, 4 }
,变量本身就会接受这个新值。但由于列表中的元素只是变量的先前值,与变量本身无关,因此不受影响。