A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一片白 中级黑马   /  2014-4-30 15:10  /  1167 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 一片白 于 2014-5-4 16:09 编辑

①值类型和引用类型分别是什么?
②值类型和引用类型在内存中的分布?堆、栈?

3 个回复

倒序浏览
本帖最后由 许庭洲 于 2014-4-30 16:10 编辑

1. 将一个值类型变量赋值给另一个值类型变量时候,将复制包含的值。引用类型变量的赋值只复制对对象的引用,而不复制对象本身;
2. 值类型不可能派生出新的类型,所有的值类型均隐士派生自Systen.ValueType。但是与引用类型相同的是,结构也可以实现接口;
3.值类型不可能包含null值,然而,可空类型功能允许将null赋给值类型;
4.每种值类型均有一个隐士的默认构造函数来初始化该类型的默认值。
5. 局部值类型变量,值类型参数等都是在栈内存中。
6. 引用类型是分配在内存的堆上的。

回复 使用道具 举报
值类型包括几本简单的数值类型,布尔类型,字符类型,结构类型,枚举类型,而引用类型有object类型,string类型,dynamic,class类型,接口,委托,数组类型。值类型用来存储数据值,在栈控件中分配空间和存储数据值,拷贝复制值类型就相当于把整个数据值拷贝复制了,引用类型是在栈空间中存储引用部分(就是引用堆空间的地址),在堆空间中分配引用类型具体对象的空间,拷贝复制引用类型其实是拷贝了栈空间的地址,特别需要注意的是如果一个类型(像自定义类)中有值类型成员和函数成员,那么在栈中存储的是整个自定义类型的地址,而在堆空间中开辟空间,在堆开辟的空间中对于函数成员又是一个引用类型所以也会把引用的地址和具体对象开辟的空间分开,就相当于一个引用类型里面又嵌套了一个引用类型。
回复 使用道具 举报
从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。






栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。
堆:一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆上。




回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马