这是引用类型的实例变量吗?

本文关键字:变量 实例 引用类型 | 更新日期: 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 },变量本身就会接受这个新值。但由于列表中的元素只是变量的先前值,与变量本身无关,因此不受影响。