引用类型与值类型详介,装箱与拆箱

简说引用类型与值类型

 

说到引用类型与值类型,肯定就是在说C#语言。

1.首先说下C#语言中那些是值类型,那些事引用类型

值类型有:基本的数值类型,char ,byte, int, struct, 枚举, 

引用类型有:数组,String ,类,委托 ,Object

一般的能用 new关键字声明的类型都是引用类型

 

2.他们在内存中的存放

值类型的值是   放在内存得线程栈空间内

引用类型的值是 放在内存中的托管堆空间内,而线程栈空间中存放的是堆空间中存

值的地址

要说明的是线程栈和托管堆都是 程序员为了方便记忆和和说明命名的,无别的意义。

值类型和引用类型还有一个重要的内容就是:

装箱和拆箱

装箱:值类型转换成引用类型

拆箱:把装箱后的对象转换成值类型的过程。

注意:装箱拆箱过程有性能的损耗。

  对与值类型装箱拆箱保持不变性,堆引用类型不保持(保持相关性)

例:

struct Person

{

public String name;

public Car car;

}

class Car

{

public String name;

Static void Main(String[] args)

{

       Person p1;

            p1.Name = "张三";

            p1.car = new Car();

            p1.car.Name = "兰博基尼mini";

 

            object o = p1;

 

            p1.Name = "三丰";

            p1.car.Name = "法拉利";

 

            Person p2 = (Person)o;

 

            Console.WriteLine(p2.Name);

            Console.WriteLine(p1.car.Name);

            Console.WriteLine(p2.car.Name);

            Console.ReadKey();

 

运行输入结果是:张三

法拉利

法拉利

由于String类型的不变性,所以当p1.name改变是它的值不会改变

Car指向的地址没变,所以值变了

}

 

用图形说明是:

 

 

 

 

关于引用类型,值类型就到这了

 

 

原文地址:https://www.cnblogs.com/jaifyhome/p/2544034.html