int值類型的ToString()方法是否裝箱


先說答案,沒有裝箱!

首先,我說一點題外話,什么是裝箱

N無論是值類型還是引用類型,他們都繼承自Object,只不過,值類型是孫子,引用類型是兒子,值類型是先繼承自ValueType,ValueType繼承自Object。

我之前也說過裝箱和拆箱,兩種不同的類型本身就不能划等號,要想把一種類型變成另一種類型,我們必須做一些操作,使得這種類型通過某種手段添加或刪除某些類型特征,變成另外一種類型。

值類型,就是單純的在棧上開辟一塊內存空間,把數據直接放進去。引用類型是在堆上開辟一塊空間,也把數據放進去,但除了數據成員,他還有另外一些默認成員:類型對象指針和同步索引塊(同步索引塊就先不說了,他是表線程同步的。)

但引用類型這些箱子,是隨機擺放的,所以他不僅在堆上開辟空間,他還在棧上有一塊空間,用來存放堆地址,指向堆中數據的位置。而裝箱,就是把值類型從棧上把數據復制一份,同時在堆上開辟一塊空間,把數據放進去(同時還有類型對象指針和同步索引塊),從而形成一個“箱子”,並把地址指針返回到棧上,同時棧開辟空間把這個地址存進去,至此,裝箱完成。

 

到這,我們就能明白下面說的了,所有類型都能用ToString(),因為他是Object的虛方法,但是在int32類型中,他重寫了Object的虛方法:

 

 所以,我們用int32的ToString()方法時,JIT(即時編譯器)會直接調用,將此實例的數值轉換為其等效的字符串表示形式,這只是一種表示形式的轉換,並沒有涉及到類型的轉換,也就沒有裝箱。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM