문제

2010-04-18 8 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); 
} 

이 코드는 다음과 같은 결과를 제공합니다
즐 즐
즐 즐
즐 즐

그 이유를 이해할 수 없다

newArray는 firstArray에 다른 인스턴스를 할당 한 후 동일한 요소를가집니다. 도와주세요.

+1

변하기 쉬운? 코드 샘플에서 선언 된 것을 볼 수 없습니다. – Oded

+0

'배열'은 어디에서 왔습니까? 그것이 'firstarray'일까요? –

+0

코드에서 배열 대신 firstarray를 의미한다고 생각합니다. – juharr

답변

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가 변경되지 않습니다.그것은 당신이 = B를 할 때,

a = address 1 
b = address 2 
c = address 3 

로의

a = address 2 
b = address 2 
c = address 3 

을 생각하는 것이 더 적절 그리고 당신이 할 때 B = 당신은`array`를 선언하는 C

a = address 2 
b = address 3 
c = address 3