(1)值类型:数据存储在内存的堆栈中,从堆栈中可以快速地访问这些数据,因此,值类型表示实际的数据。(2)引用类型:对象、数组、函数。1、值类型:包括:sbyte、short、int、long、float、double、decimal(以上值类型有符号)byte、ushort、uint、ulong(以上值类型无符号)bool、char2、引用类型:包括:对象类型、动态类型、字符串类型。二、具体区别:1、值类型:byteb1=1;byteb2=b1;Console.WriteLine("{0},{1}。",b1,b2);b2=2;Console.WriteLine("{0},{1}。",b1,b2);Console.ReadKey();解释:byteb1=1;声明b1时,在栈内开辟一个内存空间保存b1的值1。byteb2=b1;声明b2时,在栈内开辟一个内存空间保存b1赋给b2的值1。Console.WriteLine("{0},{1}。",b1,b2);输出结果为1,1。b2=2;将b2在栈中保存的值1改为2。Console.WriteLine("{0},{1}。",b1,b2);输出结果为1,2。2、引用类型:复制代码。
值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。 值类型存取速度快,引用类型存取速度慢。 值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用 值类型继承自System.ValueType,引用类型继承自System.Object 栈的内存分配是自动释放;而堆在.NET中会有GC来释放 值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。
晦涩难懂的概念呢,他们都讲了,我就不讲了。就讲一个核心的在你编程生涯中最先要体验到的一个区别:把一个值类型的变量赋给另外一个值类型的变量,那么改变二者中的任何一个,另外一个不会被改变;而引用类型则不同,如果把一个引用类型的变量赋给另外一个引用类型的变量,那么改变其中任何一个,另外一个也同样被改变。至于导致这个区别的原因,就是他们所说的那些……
引用类型与值类型相同的是,结构体也可以实现接口; 引用类型可以派生出新的类型,而值类型不能; 引用类型可以包含null值,值类型不能(可空类型功能允许将 null 赋给值类型); 引用类型变量的赋值只复制对对象的引用,而不复制对象本身。而将一个值类型变量赋给另一个值类型变量时,将复制包含的值。
打过魔兽世界吗。。。。值类型。。。传值。。。(传值就是传了一个副本,人家改也只是改了一个副本的内容,对原始值没有影响)引用类型。。。传址。。。。(传址就是说你把自己的地址给别人了,人家改都是直接改你内存地址的数据,所以对你原始值有影响)