复制一个盒装值

时间:2013-03-23 05:53:18

标签: c# boxing

关于拳击的问题......

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个新的重新装箱吗?

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

将一个盒装值分配给一个新的对象变量是什么意思,比如在最后一行?

2 个答案:

答案 0 :(得分:2)

oi = oj;
object o = ok;

盒装值是对象。只有普通的参考副本。没有拳击涉及。此外,

  

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

您没有为another value分配值。您刚刚将值分配给“变量”oi

答案 1 :(得分: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