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.栈内存的变量接收复制过来的值。
*/
{
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.栈内存的变量接收复制过来的值。
*/