2013-03-23 29 views
1

问题关于拳击...复制装箱值

int i = 2; 
int j = 3; 
int k = 4; 
object oi = i; 
object oj = j; 
object ok = k; 

oi = oj; 
object o = ok; 

做最后2行导致2新的再boxings?

将一个盒装值分配给另一个盒装值(如最后一行旁边)是什么意思?

这是什么意思分配一个盒装值到一个新的对象变量,就像在最后一行?

回答

2
oi = oj; 
object o = ok; 

装箱值是对象。只有正常的参考副本。没有涉及拳击。此外,

这是什么意思将一个盒装值分配给另一个盒装值,如在旁边的最后一行?

您没有为another value赋值。您只是将该值分配给“变量”oi

+0

所以,当你框状物体OI值=我,然后一个对象被分配到房子里,我的价值。当你做oi = oj时,你用oj引用覆盖了oi引用,所以现在oi指向j包装器,分配给我包装i的对象会发生什么? – Ryan 2013-03-23 17:09:18

+0

什么都没有发生。你刚刚删除了这个对象的引用。如果没有别的东西引用它,它将在稍后被GCed。 – 2013-03-24 11:49:52

1

嗯,你可以经常检查IL:

// int i = 2; 
IL_0000: ldc.i4.2  
IL_0001: stloc.0  // i 
// int j = 3; 
IL_0002: ldc.i4.3  
IL_0003: stloc.1  // j 
// int k = 4; 
IL_0004: ldc.i4.4  
IL_0005: stloc.2  // k 
// object oi = i; 
IL_0006: ldloc.0  // i 
IL_0007: box   System.Int32 
IL_000C: stloc.3  // oi 
// object oj = j; 
IL_000D: ldloc.1  // j 
IL_000E: box   System.Int32 
IL_0013: stloc.s  04 // oj 
// object ok = k; 
IL_0015: ldloc.2  // k 
IL_0016: box   System.Int32 
IL_001B: stloc.s  05 // ok 
// oi = oj; 
IL_001D: ldloc.s  04 // oj 
IL_001F: stloc.3  // oi 
// object o = ok; 
IL_0020: ldloc.s  05 // ok 
IL_0022: stloc.s  06 // o