值类型和引用类型的区别?

如题所述

(1)值类型:数据存储在内存的堆栈中,从堆栈中可以快速地访问这些数据,因此,值类型表示实际的数据。
(2)引用类型:对象、数组、函数。

1、值类型:包括:sbyte、short、int、long、float、double、decimal(以上值类型有符号)byte、ushort、uint、ulong(以上值类型无符号)bool、char
2、引用类型:包括:对象类型、动态类型、字符串类型。二、具体区别:
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、引用类型:复制代码。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-07-01

值类型、引用类型区别:

    值类型内容存储在(栈)上。引用类型指针存储在(栈)上,内容存储在(堆)上。

    值类型和引用类型最大的不同是:传递的效率和影响:效率指:软件运行时,复杂功能在大量运算,毫秒级上内存一直在复制和分配,一组数据的值拷贝和指针拷贝,cpu性能和内存表现差异大,影响指:修改方法里的数据会不会影响到方法外的数据对象。

    值类型=其他变量时是复制内容(替换栈内容),引用类型=其他变量时是替换指针(替换栈指针)。

    值类型赋值时(例=1)是替换内容(替换栈内容),引用类型=new时是新分配内存(新分配堆内存)和替换指针(替换栈指针)。

    值类型在方法传递参数过程中是复制1份内容(新分配栈内容),引用类型在方法传递过程中是复制1个指针(新分配栈指针),指向同1个内容,内容没复制。

    值类型在方法里修改不影响方法外变量,引用类型在方法里修改,因为指向同1个内容,方法外的值也同步变化。

字符串是特殊的引用类型:

    字符串是特殊的引用类型,每次=新字符串实际都改变一次栈指针(新分配堆内存,替换栈指针),而没有改变值。

    字符串传给方法是1个指针(新分配栈指针)。方法内=新字符串是替换方法内的指针(替换新栈指针),不影响方法外的指针(不影响原栈指针),所以表现看过去与值传递一致。

结构体struct值类型、class引用类型区别:

 结构体struct是值类型,但是结构体中的字符串、数组、类存放的是指针,和值一起存在栈上。

   所谓值类型, 结构体的表现就是传给方法是复制1套指针和1套值,在方法内修改结构体1级属性(修改结构体字符串、new数组、new类)改的是方法内结构体的指针(1级指针),无法改变方法外结构体的指针,所以不影响方法外的结构体,但是修改数组内数据和类属性会影响方法外的结构体(因为改的是1级指针指向的内容)。

    class是引用类型,传给方法是1个指针。方法内替换属性会影响方法外的对象(因为修改的是指针指向的内容)。但是方法内再次=new对象是替换方法内的对象指针,不影响方法外的对象,再替换属性就不影响方法外的对象。

第2个回答  推荐于2018-02-28
值类型就是现金,要用直接用;引用类型是存折,要用还得先去银行取现。
声明一个值类型变量,编译器会在栈上分配一个空间,这个空间对应着该值类型变量,空间里存储的就是该变量的值。引用类型的实例分配在堆上,新建一个引用类型实例,得到的变量值对应的是该实例的内存分配地址,这就像您的银行账号一样。
具体哪些类型是值类型哪些是引用类型,大家翻翻书,背一背就好了,不过我想,做过一段时间的开发,即使您背不了书上教条的定义,也不会把值类型和引用类型搞混的。本回答被网友采纳
第3个回答  2012-05-06
C# 支持两种类型:“值类型”和“引用类型”。
值类型(如 char、int 和 float)、枚举类型和结构类型。
引用类型包括类 (Class) 类型、接口类型、委托类型和数组类型。
值类型与引用类型的区别在于值类型的变量直接包含其数据,而引用类型的变量则存储对象引用。对于引用类型,两个变量可能引用同一个对
象,因此对一个变量的操作可能影响另一个变量所引用的对象。对于值类型,每个变量都有自己的数据副本,对一个变量的操作不可能影响另一个变量
第4个回答  2012-05-06
最大的区别是赋值的时候,
值类型,是变量的值,进行复制。
引用类型,是地址值在相互赋值。
相似回答