.net裝箱和拆箱
阿新 • • 發佈:2019-01-02
//裝箱:值型別→引用型別
//拆箱:引用型別→值型別
//裝箱拆箱轉化,n在意義上本身就是屬於object型別的,只是在o對應的對記憶體中複製了一個n存進去,這種轉化叫裝箱
int n = 10;
object o = n;
int m = (int)o;
//不屬於裝箱拆箱的轉化,tring與int在記憶體存在形式上是不同的,這種雖然也是把值型別轉化為引用型別,但是,這種方式是先在堆記憶體上開闢一個空間,然後儲存一個string型的”10”,然後再把地址給str,這種不叫裝箱
int i = 20;
string str = Convert.ToString(i);
int y = int.Parse(str);
//3、裝箱和拆箱:必須是在記憶體方面存在的形式相同的轉化才叫拆裝箱,也就是子父類之間的轉換,裝的時候是什麼型別裝的箱,拆的時候也必須是同樣的型別接受,否則會錯
//int q = 30;
//object oo = q;
//double d = (double)oo;
//int實現了IComParable介面,所以也是裝箱拆箱
int x = 100;
IComparable ic = x;
int w = (int)ic;
char ch = 's';
string ch2 = "w";
int n1 = 10;
double d2 = 19;
string r = string.Concat(ch, ch2, n1, d2);
Console.WriteLine(r);
#region 頻繁發生拆箱和裝箱和消耗時間、資源
ArrayList arr = new ArrayList();
Stopwatch sw = new Stopwatch();
sw.Start();////00:00:01.7436891時間
for (int ii = 0; ii < 10000000; ii++)
{
arr.Add(ii);
}
sw.Stop();
Console.WriteLine(sw.Elapsed);
sw.Restart();
sw.Start();
//時間00:00:00.4028327
List<int> list = new List<int>();
for (int ii = 0; ii < 10000000; ii++)
{
list.Add(ii);
}
sw.Stop();
Console.WriteLine(sw.Elapsed);
#endregion
Console.ReadKey();
//拆箱:引用型別→值型別
//裝箱拆箱轉化,n在意義上本身就是屬於object型別的,只是在o對應的對記憶體中複製了一個n存進去,這種轉化叫裝箱
int n = 10;
object o = n;
int m = (int)o;
//不屬於裝箱拆箱的轉化,tring與int在記憶體存在形式上是不同的,這種雖然也是把值型別轉化為引用型別,但是,這種方式是先在堆記憶體上開闢一個空間,然後儲存一個string型的”10”,然後再把地址給str,這種不叫裝箱
int i = 20;
string str = Convert.ToString(i);
int y = int.Parse(str);
//3、裝箱和拆箱:必須是在記憶體方面存在的形式相同的轉化才叫拆裝箱,也就是子父類之間的轉換,裝的時候是什麼型別裝的箱,拆的時候也必須是同樣的型別接受,否則會錯
//int q = 30;
//object oo = q;
//double d = (double)oo;
//int實現了IComParable介面,所以也是裝箱拆箱
int x = 100;
IComparable ic = x;
int w = (int)ic;
char ch = 's';
string ch2 = "w";
int n1 = 10;
double d2 = 19;
string r = string.Concat(ch, ch2, n1, d2);
Console.WriteLine(r);
#region 頻繁發生拆箱和裝箱和消耗時間、資源
ArrayList arr = new ArrayList();
Stopwatch sw = new Stopwatch();
sw.Start();////00:00:01.7436891時間
for (int ii = 0; ii < 10000000; ii++)
{
arr.Add(ii);
}
sw.Stop();
Console.WriteLine(sw.Elapsed);
sw.Restart();
sw.Start();
//時間00:00:00.4028327
List<int> list = new List<int>();
for (int ii = 0; ii < 10000000; ii++)
{
list.Add(ii);
}
sw.Stop();
Console.WriteLine(sw.Elapsed);
#endregion
Console.ReadKey();