首页 > 其他 > 详细

值类型和引用类型的区别

时间:2014-03-16 06:41:48      阅读:454      评论:0      收藏:0      [点我收藏+]
值类型和引用类型的区别(结构和类)
                1. 值类型分配在内存栈上,引用类型分配在托管堆上。当一个值类型的变量赋给另一个值类型的变量时,会执行一次逐字段的复制,而一个引用类型的变量赋给另一个引用类型的变量时,仅仅会复制对象的内存地址。
                2. 基于上一条,多个引用类型的变量可以同时指向同一个对象,对其中的任何一个变量执行操作都会影响到另一个变量引用的对象。而每个值类型的变量都已经包含了自己的对象,所以对值类型对象的操作不会影响到另一个值类型变量。
                3. 值类型包括结构和枚举,他们均间接或直接派生自System.ValueType类;引用类型包括类和接口,他们都派生自System.Object类(这一句是废话,所有的类型都派生自System.Object类,可说可不说)。
                4. 值类型都是隐式密封的,不能将一个值类型作为基类来定义一个新的值类型或者引用类型,也因此值类型中不能包括虚方法(不能被继承,虚方法给谁重写呢)。
                5、默认情况下,创建一个引用类型的变量时,他会被初始化为null;而创建一个值类型时,他的所有成员都会被初始化为0.
                6. 值类型的变量一旦超过了其作用域,为他分配的内存就会被立即释放;而引用类型则会在托管堆里待一段时间,直到垃圾回收器将其回收。
                7. 由于System.ValueType类重写了Equals方法,所以两个值类型的Equals方法会在两个对象的字段完全匹配的情况下返回true;而引用类型的Equals则会在两个变量引用同一个对象的情况下才返回true。(这一条不重要,不说也无所谓,但是如果被问到自己要有所了解).
 
关系图:     比如我们一个值类型的变量 valType, 他包含一个int的字段a,其值为5,他在栈和堆中的示意图为:
bubuko.com,布布扣
 

值类型和引用类型的区别,布布扣,bubuko.com

值类型和引用类型的区别

原文:http://www.cnblogs.com/Rikybk/p/3600630.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!