简说引用类型与值类型
说到引用类型与值类型,肯定就是在说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指向的地址没变,所以值变了
}
用图形说明是:
关于引用类型,值类型就到这了