zoukankan      html  css  js  c++  java
  • 关于装箱的一个问题

    在《.NET框架程序设计》中有这样的一个例子:

    using System;

    struct Point : ICloneable
    {
        
    public Int32 x, y;

        
    public override String ToString()
        
    {
            
    return String.Format("({0}, {1}", x, y);
        }


        
    public Object Clone()
        
    {
            
    return MemberwiseClone();
        }

    }


    public class App
    {
        
    public static void Main()
        
    {
            Point p;
            p.x 
    = 10;
            p.y 
    = 20;

            Console.WriteLine(p.ToString());
            Console.WriteLine(p.GetType());

            Point p2 
    = (Point)p.Clone();
            ICloneable c 
    = p2;

            Object o 
    = c.Clone();

            p 
    = (Point)o;
        }

    }


    里面提到p在执行ToString方法的时候不会发生装箱。通过看IL代码确实是这么回事,但是再去查看Point的ToString方法的IL代码,发现在其中进行了装箱操作,那么是不是总的说来还是进行了装箱操作呢?

    IL代码如下:

    .method public hidebysig virtual instance string
            ToString() cil managed
    {
      // Code size       37 (0x25)
      .maxstack  3
      .locals init (string V_0)
      IL_0000:  ldstr      "({0}, {1}"
      IL_0005:  ldarg.0
      IL_0006:  ldfld      int32 Point::x
      IL_000b:  box        [mscorlib]System.Int32
      IL_0010:  ldarg.0
      IL_0011:  ldfld      int32 Point::y
      IL_0016:  box        [mscorlib]System.Int32
      IL_001b:  call       string [mscorlib]System.String::Format(string,
                                                                  object,
                                                                  object)
      IL_0020:  stloc.0
      IL_0021:  br.s       IL_0023
      IL_0023:  ldloc.0
      IL_0024:  ret
    } // end of method Point::ToString

    请各位高手指教。
  • 相关阅读:
    (转)乐观的并发策略——基于CAS的自旋
    mysql避免插入重复数据
    Java_Web使用简单的批处理操作
    Java中jar命令详解
    使用文档注释(javadoc)
    APP和WEB元素定位方法
    RF(二)RF常用库介绍
    RF(一)RF的安装步骤
    javascript匿名函数及闭包深入理解及应用
    javascript简介
  • 原文地址:https://www.cnblogs.com/gamix/p/136414.html
Copyright © 2011-2022 走看看