我有以下代码:
string[] firstArray = { "bla bla", "bla bla", "bla bla"};
string[] secondArray = {"aaaaaaaaaaaa", "aaaaaaaaaaa", "aaaaaaaaa"};
string[] newArray = firstArray;
firstArray = secondArray;
foreach (string item in newArray)
{
Console.WriteLine(item);
}
此代码给出以下结果:
bla bla
bla bla
bla bla
在将不同的实例分配给firstArray之后,我无法理解为什么newArray具有相同的conntent。请帮帮我。
答案 0 :(得分:4)
您正在为数组分配引用,而不是数组本身。
string[] firstArray = { "bla bla", "bla bla", "bla bla"};
firstArray引用了blabla数组。
string[] secondArray = {"aaaaaaaaaaaa", "aaaaaaaaaaa", "aaaaaaaaa"};
secondArray引用了aaaaaaaaaaaa数组。
string[] newArray = array;
我想某处有一个array = firstArray
。 newArray保存对firstArray(blabla)相同数组的引用。
array = secondArray;
数组保存对secondArray(aaaaaaaaaaa)的相同数组的引用。
foreach (string item in newArray)
newArray仍保留对blabla数组的引用,以便打印。
答案 1 :(得分:0)
因为您只更改了对数组的引用。因此newArray将引用firstArray,然后更改firstArray引用,但newArray仍引用前一个blabla数组。
答案 2 :(得分:0)
string[] newArray = array;
array = secondArray;
array
是未声明的未定义变量。
我看不到您如何为其分配newArray
,或将其设置为secondArray
。
您还可以参考firstArray
和firstarray
,这些都无效。
答案 3 :(得分:0)
我假设当你在代码中写'array'时,你的意思是'firstArray'。
没有变化,因为你根本没有分配给newArray。 newArray是一个参考;当你键入string [] newArray = array时,它指向与firstArray相同的地址。将firstArray分配给secondArray时,只需更改firstArray指向的位置即可。这不会改变newArray指向的位置。
基本概念是C#中的引用变量是指内存地址。这不是平等的想法。也就是说,a = b,你设置b = c,它不会改变a。将其视为
更为恰当a = address 1
b = address 2
c = address 3
当你做a = b时,
a = address 2
b = address 2
c = address 3
当你做b = c
时a = address 2
b = address 3
c = address 3