黑马程序员技术交流社区

标题: 值类型和引用类型的区别 [打印本页]

作者: 张亚鑫    时间: 2012-12-19 09:14
标题: 值类型和引用类型的区别
本帖最后由 张亚鑫 于 2012-12-19 13:34 编辑

分配内存好像是不一样的?
作者: 许庭洲    时间: 2012-12-19 10:08
1. 将一个值类型变量赋值给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对对象的引用,而不复制对象本身;
2. 值类型不可能派生出新的类型:所有的值类型均隐式派生自System.ValueType。但与引用类型相同的是,结构也可以实现接口。
3. 值类型不可能包含null值:然而,可空类型功能允许将null赋给值类型;
4. 每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。

作者: 孙辉辉    时间: 2012-12-19 10:26
直白点儿说:值类型就是现金,要用直接用;引用类型是存折,要用还得先去银行取现。

声明一个值类型变量,编译器会在栈上分配一个空间,这个空间对应着该值类型变量,空间里存储的就是该变量的值。引用类型的实例分配在堆上,新建一个引用类型实例,得到的变量值对应的是该实例的内存分配地址,这就像您的银行账号一样。
作者: 刘斌    时间: 2012-12-19 16:14
所有值类型都继承自System.ValueType,但是ValueType没有附加System.Object包含之外其它任何方法,不过它倒是改写了Equals和GetHashCode两个方法。引用类型变量的Equals比较的是二者的引用地址而不是内部的值,值类型变量的Equals方法比较的是二者的值
值类型不能作为其它任何类型的基类型,因此不能向值类型中增加任何新的虚方法,更不该有任何抽象方法,不可重写

作者: 徐威    时间: 2012-12-19 16:41
值类型的变量本身就存储着“实例”的内容,即变量的内容就是值本身,有几个变量就有几份值;-而引用类型的变量,存储的是该引用实例在内存中的首地址,即变量的内容只是个内存地址,多个变量可以指向同一个实例。

具体值类型和应用类型在内存中的形态请看:
http://hi.baidu.com/kingboy_wrx/item/cf08fbbc0de4e043ba0e12df




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2