static void main(string[] args)
{
    Int32 y=5;
    object o = y;
    y=6;
    Console.WriteLint(y+","+(Int32)o);
    Console.ReadLine();
}发生了几次拆箱装箱?请给解释!

解决方案 »

  1.   

    Console.WriteLine的时候可是也做了其他事哟~~~
      

  2.   

    static void main(string[] args)
    {
        Int32 y=5;
        object o = y;//装箱
        y=6;
        Console.WriteLint(y+","+(Int32)o);//拆箱
        Console.ReadLine();
    }
      

  3.   

    将值类型转换为引用类型,需要进行装箱操作:      1)首先从托管堆中为新生成的引用对象分配内存。      2)然后将值类型的数据拷贝到刚刚分配的内存中。      3)返回托管堆中新分配对象的地址。也就是说LZ的例子 中显示的装箱拆箱只有一次! 但是如果要把Console.WriteLine在执行过程中
    进行的装箱拆箱算进去的话,就应该是3次
    第一次是 object o = y
    第二次和第三次是Console.WriteLine(),中的两个INT32类型,在Console.WriteLine执行时默认
    让他们都调用ToString()
      

  4.   


    Console.WriteLine()在下面的红色部分。可以看出其做了什么  .locals init ([0] int32 y,
               [1] object o)
      IL_0000:  nop
      IL_0001:  ldc.i4.5
      IL_0002:  stloc.0
      IL_0003:  ldloc.0
      IL_0004:  box        [mscorlib]System.Int32
      IL_0009:  stloc.1
      IL_000a:  ldc.i4.6
      IL_000b:  stloc.0
      IL_000c:  ldloc.0
      IL_000d:  box        [mscorlib]System.Int32
      IL_0012:  ldstr      ","
      IL_0017:  ldloc.1
      IL_0018:  unbox.any  [mscorlib]System.Int32
      IL_001d:  box        [mscorlib]System.Int32

      IL_0022:  call       string [mscorlib]System.String::Concat(object,
                                                                  object,
                                                                  object)
      IL_0027:  call       void [mscorlib]System.Console::WriteLine(string)

      IL_002c:  nop
      IL_002d:  call       string [mscorlib]System.Console::ReadLine()
      IL_0032:  pop
      IL_0033:  ret
      

  5.   


    都是微软灌出来的习惯,诶。总有人爱这么写。用过vc的人基本都会写
    Console.WriteLint(y+","+o.ToString());

    Console.WriteLint("y,{0}",o);不过既然是考试,都逃不了弄些容易混淆的东西…
    我要仔细点了…
      

  6.   

    装箱发生在 o=y 1次,y+","+(int32)o这个地方也发生了2次
    拆箱发生在(int32)O
      

  7.   

    装箱发生在 o=y 1次,y+","+(int32)o这个地方也发生了2次
    拆箱发生在(int32)O  
     支持楼上
      

  8.   

    将值类型转换为引用类型,需要进行装箱操作:  1)首先从托管堆中为新生成的引用对象分配内存。  2)然后将值类型的数据拷贝到刚刚分配的内存中。  3)返回托管堆中新分配对象的地址。也就是说LZ的例子 中显示的装箱拆箱只有一次! 但是如果要把Console.WriteLine在执行过程中
    进行的装箱拆箱算进去的话,就应该是3次
    第一次是 object o = y
    ……
    [/Quote]