2009-10-27 57 views
2

我在下面的C#代碼。C# - 查找輸出

Object first = 5; 
Object second = 10; 
second = first; 
Console.WriteLine(first + " " + second); 


Object a = 3; 
Object b = a; 
a = 6; 
Console.WriteLine(a + " " + b); 

我得到以下輸出:

5 5 
6 3 

其實我期待 「6 6」 作爲第二組。有人可以解釋我錯了嗎?

Regards, 賈斯汀塞繆爾。

+1

好的問題,對入學考試 – 2009-10-27 11:23:18

回答

4

a = 6; 

受讓人a參考盒裝詮釋。
b一直引用先前裝箱的值(3)。

0

當設置= 6,其僅設置A,B保持3. (這將被期望的)

1

每個Object變量將包含一個int其是值類型ab將是兩個不同的實例,因此更改a(其實質上意味着具有a參考新的int實例)的值不會改變b的值。您可以更改您的第一個代碼示例以產生類似的結果:

Object first = 5; 
Object second = 10; 
second = first; 
first = 8; 
Console.WriteLine(first + " " + second); // prints "8 5" 
+1

他不改變(a)的(int)值,但使'a'參考不同的對象。 – 2009-10-27 11:11:28

+0

@亨克:是的,這是一種更明確的表達方式。 – 2009-10-27 11:12:40

+0

Henk絕對正確。 – 2009-10-27 11:15:02

1

整數是值類型,而不是引用。

當你寫這個

object a = 3; 
object b = a; 

您分配 3到B。隨後,與

a = 6; 

您分配 6 a和b不受影響,因爲它被分配了 3.

+0

但'a'和'b'是引用(對盒裝int)。 – 2009-10-27 11:24:12

0
static unsafe void Main() 
    { 

     Object first = 5; 
     Object second = 10; 
     second = first; 
     Console.WriteLine(first + " " + second); 

     int i = 3; 
     int y = 6; 
     int* a = &i; 
     int** b = &a; 
     a = &y; 
     Console.WriteLine(*a + " " + **b);} 

COMPLIT與/不安全

 
5 5 
6 6 

:-)。我不推薦用這種方式編寫代碼,儘管=)