装箱拆箱原理Demo

来源:互联网 发布:麻婆豆腐 日本 知乎 编辑:程序博客网 时间:2024/06/08 04:24
class demo
{
static void Main(string[] args)
{
  int temp=3;
  Object obj=temp;//装箱:值类型转换为引用类型(隐式转换)
  
 System.Object obj=3;    // 拆箱:引用类型转换为值类型。显式转换。
 int i=(int)obj;  //强制转换。只有被装过箱的对象才能拆箱。
 System.Console.WriteLine(i);
}
//装箱拆箱操作虽然满足了两只类型的转换,但从过程中可以看到,每次装箱都要在堆中new一个对象,大批量的数据装箱拆箱会大大降低效率。
}


class  Demo
{
static void Main(string[] args)
{
int a=3;   //Int32就是一个类。
Show(a);//自动完成装箱动作操作。
}
static void Show(System.Object obj)    //对象类型的参数,传入值类型的实际参数。会默认进行装箱操作。
{
System.Console.WriteLine("hello");
}
}*/


class  Demo
{
static void Main(string[] args)
{
int a=3;   
Show(a); //Show(null); //空指针异常。nullreferenceException,表明obj参数没有引用。
}
static void Show(System.Object obj)    //把子类对象作为实际参数,传给父类对象类型的形式参数,无法实现子类特有功能,所以必须拆箱,转换为子类对象,再操作。
{
int i=(int)obj;       
System.Console.WriteLine(i);
}
}
/*
装箱的过程:1.首先分配堆内存,在堆内存中开辟一块儿空间。2.把值类型的实际值复制到新分配内存中。3.新内存返回地址值,赋值给引用的变量。
拆箱的过程:
1.首先检查对象的实例,确保是已经被装箱过的值类型。2.将这个值从实例复制到值类型的变量中。3.栈内存的变量接收复制过来的值。
*/
0 0
原创粉丝点击