2010-04-18 59 views
1

我有以下代码:问题的复制阵列

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); 
} 

此代码的结果如下:
喇嘛喇嘛
喇嘛喇嘛
喇嘛喇嘛

我不明白为什么在将一个不同的实例分配给firstArray之后,newArray具有相同的含义。请帮帮我。

+1

你在哪里声明'array'变量?我看不到它在您的代码示例中声明。 – Oded 2010-04-18 16:31:15

+0

'数组'从哪里来?这应该是'第一阵风'吗? – 2010-04-18 16:31:47

+0

我想你的意思是firstarray,而不是你的代码中的数组。 – juharr 2010-04-18 16:33:00

回答

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(aaaaaaaaaaaa)相同的数组的引用。

foreach (string item in newArray) 

newArray仍然持有对blabla数组的引用,以便打印。

0

因为你只改变对数组的引用。所以newArray将引用firstArray,然后更改firstArray引用,但newArray仍然引用前一个blabla数组。

0
string[] newArray = array; 
array = secondArray; 

array是一个未声明的未定义变量。 我看不出如何将newArray分配给它,或者将其设置为secondArray

您也参考firstArrayfirstarray,这将无法正常工作。

0

我假设你在代码中写'数组'时,你的意思是'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