• int值类型的ToString()方法是否装箱


    先说答案,没有装箱!

    首先,我说一点题外话,什么是装箱

    N无论是值类型还是引用类型,他们都继承自Object,只不过,值类型是孙子,引用类型是儿子,值类型是先继承自ValueType,ValueType继承自Object。

    我之前也说过装箱和拆箱,两种不同的类型本身就不能划等号,要想把一种类型变成另一种类型,我们必须做一些操作,使得这种类型通过某种手段添加或删除某些类型特征,变成另外一种类型。

    值类型,就是单纯的在栈上开辟一块内存空间,把数据直接放进去。引用类型是在堆上开辟一块空间,也把数据放进去,但除了数据成员,他还有另外一些默认成员:类型对象指针和同步索引块(同步索引块就先不说了,他是表线程同步的。)

    但引用类型这些箱子,是随机摆放的,所以他不仅在堆上开辟空间,他还在栈上有一块空间,用来存放堆地址,指向堆中数据的位置。而装箱,就是把值类型从栈上把数据复制一份,同时在堆上开辟一块空间,把数据放进去(同时还有类型对象指针和同步索引块),从而形成一个“箱子”,并把地址指针返回到栈上,同时栈开辟空间把这个地址存进去,至此,装箱完成。

    到这,我们就能明白下面说的了,所有类型都能用ToString(),因为他是Object的虚方法,但是在int32类型中,他重写了Object的虚方法:

     所以,我们用int32的ToString()方法时,JIT(即时编译器)会直接调用,将此实例的数值转换为其等效的字符串表示形式,这只是一种表示形式的转换,并没有涉及到类型的转换,也就没有装箱。

  • 相关阅读:
    install jprofiler for ubuntu
    android manifest相关属性
    install nginx for ubuntu
    Android shape
    mobile web for no cookie session
    Android布局属性
    什么是强类型,强类型集合
    radl (三) (转)
    几个.net 基础问题,自己回答了一些,请大家指教
    c#接口和抽象类的区别
  • 原文地址:https://www.cnblogs.com/lvqiang/p/12123288.html
Copyright © 2020-2023  润新知