首先是包裝型別
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.將字段包含的值從堆複製到基於棧的值...