2009-10-27 61 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 

:-)。我不推荐用这种方式编写代码,尽管=)