装箱:将值类型转换为引用类型。
    拆箱:将引用类型转换为值类型。

    条件:看两种类型是否发生了装箱或者拆箱,要看,这两种类型是否存在继承关系。

    1. using System;
    2. using System.Collections;
    3. using System.Collections.Generic;
    4. using System.Diagnostics;
    5. namespace _075_装箱和拆箱
    6. {
    7. class Program
    8. {
    9. static void Main(string[] args)
    10. {
    11. int n = 1;
    12. object o = n;//装箱(值类型->引用类型)
    13. int nn = (int)o;//拆箱(引用类型->值类型)
    14. ArrayList list = new ArrayList();
    15. //计时
    16. Stopwatch sw = new Stopwatch();
    17. sw.Start();
    18. //这个循环完成了一千万次装箱操作
    19. for (int i = 0; i < 10000000; i++)
    20. {
    21. list.Add(i);
    22. }
    23. sw.Stop();
    24. Console.WriteLine(sw.Elapsed);//00:00:01.2557403
    25. List<int> list1 = new List<int>();
    26. //计时
    27. Stopwatch sw1 = new Stopwatch();
    28. sw1.Start();
    29. //这个循环完成了一千万次赋值操作
    30. for (int i = 0; i < 10000000; i++)
    31. {
    32. list1.Add(i);
    33. }
    34. sw1.Stop();
    35. Console.WriteLine(sw1.Elapsed);//00:00:00.0940650
    36. //可见,装箱操作时间较长
    37. //这个地方并没有发生任何的装箱或者拆箱(int string 无继承关系)
    38. string str = "123";
    39. int n1 = Convert.ToInt32(str);
    40. int n2 = 1;
    41. IComparable I = n2;//装箱,IComparable是int的一个接口
    42. Console.ReadKey();
    43. }
    44. }
    45. }