我真正想知道的是这段代码:
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< T> 的所有元素吗?
答案 0 :(得分:4)
是作为对象副本创建的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]
中产生相同的值。
答案 1 :(得分:0)
如果没有扩展的对话,实际上不可能确切地知道这一系列陈述的哪一部分让你感到困惑。但在我看来,这些操作的关键方面是你错了可能是这样的:当执行语句listArr.Add(arrInt);
时,添加到列表中的东西是对象的引用 arrInt
正在引用,而不是你想象中的变量arrInt
本身。
语句完成后,列表中的元素与变量arrInt
无任何关联。该变量包含一个值,该值是对数组{ 1, 2 }
的引用。当您执行listArr.Add(arrInt);
时,添加到列表中的内容是变量包含的值,即对该数组的引用。
当您为变量arrInt
分配新值时,即对完全不同的数组{ 3, 4 }
的引用时,变量本身会采用该新值。但由于列表中的元素只是变量的前一个值,与变量本身无关,因此不受影响。