包裝型別 裝箱拆箱 基本型別速度比較

2021-06-23 07:49:54 字數 1050 閱讀 1610

首先是包裝型別

long sum = long.valueof(0);

long t1 = system.currenttimemillis();

for (long i = long.valueof(0); i < integer.max_value/2; i++)

t1 = system.currenttimemillis() - t1;

system.out.println("packaging took "+ t1 +" sum = "+ sum);

耗時:12759ms

裝箱拆箱

long sum = 0l;

long t0 = system.currenttimemillis();

for (long i = 0; i < integer.max_value/2; i++)

t0 = system.currenttimemillis() - t0;

system.out.println("unboxing boxing took "+ t0 +" sum = "+ sum);

耗時:6144ms

基本型別

long s = 0l;

long t2 = system.currenttimemillis();

for (long i = 0l; i < integer.max_value/2; i++)

t2 = system.currenttimemillis() - t2;

system.out.println("prime took "+ t2 +" sum = "+ s);

耗時:581ms

速度之差立桿見影,基本型別的速度約是包裝型別的21倍,裝箱拆箱的10倍。

裝箱拆箱那段**是容易寫錯的地方,乙個大小寫之差。

優先使用基本型別的論點是有道理的。

值型別 引用型別,裝箱 拆箱

值型別 宣告乙個值型別變數,會在棧上分配乙個空間,空間裡儲存的就是變數的值 引用型別 宣告乙個引用型別變數,會在棧中分配乙個空間,儲存乙個引用,這個引用指向了乙個託管堆。值型別 struct,列舉,數值型別,bool型別 引用型別 陣列,類,介面,委託 delegate object,string ...

型別的裝箱和拆箱

c 使用單類層次的單一繼承 所有類都繼承自object基類,而且不可能多重繼承。但是c 的介面提供了許多多重繼承的功能 型別的裝箱和拆箱 boxing and unboxing types 裝箱 boxing 和拆箱 unboxing 是使值型別 如整數 能夠被當成引用型別 物件 的處理過程。值被 ...

值型別的裝箱,拆箱

裝箱發生的事情 1.在託管堆中分配記憶體。分配的記憶體量是值型別各字段所需的記憶體量,還要加上託管堆所有物件都有的兩個額外成員 型別物件指標和同步塊索引 所需的記憶體量。2.值型別的字段複製到新分配的堆記憶體。拆箱發生的事情 1.獲取已裝箱物件中各個欄位的位址。2.將字段包含的值從堆複製到基於棧的值...