似曾相识?值类型与引用类型的区别及其转换
值类型与引用类型的区别
在上一篇中,简单的总结了下值类型与引用类型的基本概念.下图是总结的一张表
关于内存的分配问题,这些堆和栈的概念,我都是不是很懂.类似一个篮子,里面可以放各式各样的东西.这里就是用来放置
不同类型的数据,先大致这样来理解下.以后要用到的时候再去研究,如果有兴趣大家看看这个堆栈或许能明白.
主要区别
值类型的变量包含自身的数据,而引用的数据类型包含指向数据的内存块引用.读到这里,让我想起了VB时代里,byref和
byval.这两种不同的传值方式.接着来说值类型和引用类型,值类型对于每个变量都有一份自己的数据拷贝,则在使用数
据的时候,不会因为对一个数据的操作去影响另一个数据;而在引用类型中,可以通过对一个变量的操作来影响另一个变
量的引用的对象.
来看一个例子,或许更生动点
namespace _1 { class ValueClass //定义类 { public int value = 0; } class ValueAndRefType //定义类 { public static void Main() //方法 { int a = 0; //a的初始变量未整型0 int b = a; b = 10; ValueClass ref1 = new ValueClass(); //创建类对象ref1 ValueClass ref2 = ref1; //创建类对象ref2,并赋值ref1 ref2.value = 10; Console.WriteLine("Value:{0},{1}", a, b); //对变量ref2重新赋值 Console.WriteLine("Refs:{0},{1}", ref1.value, ref2.value); //通过ref2重新赋值,影响了ref1和ref2所引用对象 } } } 运行结果: Value:0,1 Refs:10,10