int值型別的ToString 方法是否裝箱

2022-06-05 15:12:10 字數 774 閱讀 3938

先說答案,沒有裝箱!

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

(n無論是值型別還是引用型別,他們都繼承自object,只不過,值型別是孫子,引用型別是兒子,值型別是先繼承自valuetype,valuetype繼承自object。

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

值型別,就是單純的在棧上開闢一塊記憶體空間,把資料直接放進去。引用型別是在堆上開闢一塊空間,也把資料放進去,但除了資料成員,他還有另外一些預設成員:型別物件指標和同步索引塊(同步索引塊就先不說了,他是表執行緒同步的。)

但引用型別這些箱子,是隨機擺放的,所以他不僅在堆上開闢空間,他還在棧上有一塊空間,用來存放堆位址,指向堆中資料的位置。而裝箱,就是把值型別從棧上把資料複製乙份,同時在堆上開闢一塊空間,把資料放進去(同時還有型別物件指標和同步索引塊),從而形成乙個「箱子」,並把位址指標返回到棧上,同時棧開闢空間把這個位址存進去,至此,裝箱完成。

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

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

MySQL中Int型別的長度值問題

mysql在建表的時候int型別後的長度代表什麼?是該列允許儲存值的最大寬度嗎?為什麼我設定成int 1 也一樣能存10,100,1000呢.當時我雖然知道int 1 這個長度1並不代表允許儲存的寬度,但卻沒有乙個合理的解釋.或者說對這個長度也沒有真正的研究過到底代表什麼,平時都用int 11 也不...

go語言int型別最大值

正數的補碼是自己本身 負數的補碼是,先取反碼 首尾不反 然後 1 2.在go語言中 0表示對0取反 我們假如是4位代表乙個數字的話,最高位是符號位 0在計算機中用補碼的形式存在是 0000 取反得到 1111 是 1在計算機中以補碼的形式存在,所以 0 就是 1 所以 1 就是 1110 就是 2 ...

int型別的範圍

int型別應該是 32768 32767 因為0在原碼中分為 0和 0 假設int是2個byte 則 0 0000000000000000 而 0 1000000000000000 取補碼後 0 0000000000000000 0 0000000000000000 原碼取反加一 這樣0在補碼中只有...