c# - 在值类型上调用对象函数是否会导致自动装箱

标签 c# autoboxing

在 C# 中,在值类型上调用对象函数(如 Equals() 和 ToString())是否意味着编译器将执行自动装箱来执行操作。例如。下面的代码会发生自动装箱吗?

int x=2;
int y=7;
bool isEqual = x.Equals(y);

最佳答案

没有。

    static void DoIt()
    {
        int x = 2;
        int y = 7;
        bool isEqual = x.Equals(y);
        Console.WriteLine(isEqual);
    }

将成为:

  IL_0002:  stloc.0
  IL_0003:  ldc.i4.7
  IL_0004:  stloc.1
  IL_0005:  ldloca.s   x
  IL_0007:  ldloc.1
  IL_0008:  call       instance bool [mscorlib]System.Int32::Equals(int32)
  IL_000d:  stloc.2
  IL_000e:  ldloc.2
  IL_000f:  call       void [mscorlib]System.Console::WriteLine(bool)

不存在 box IL 操作码,因此不会发生装箱。

如您所见,它调用 Int32.Equals(Int32)不需要任何装箱的方法 - 它接受非装箱的 Int32 结构作为参数。还有Int32.Equals(Object) - 这个需要拳击。

关于c# - 在值类型上调用对象函数是否会导致自动装箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24598605/

相关文章:

C#启动定时任务

java - 自动装箱-编程概念

Java 自动装箱和三元运算符的疯狂

c# - 向我的应用程序添加服务层

c# - MVC Application_start localhost 重定向你太多次

c# - 保持两个线程之间的 bool 值同步

java - 装箱到对象类型以避免编译失败

c# - 您能否拥有一个从仅具有用户级权限的客户端应用程序链接的具有管理员权限的 DLL?

Java Singleton.getInstance() 返回空值?

java - 如何安全地处理 Java 的包装原语