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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张亚鑫 中级黑马   /  2012-12-19 09:14  /  1800 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张亚鑫 于 2012-12-19 13:34 编辑

分配内存好像是不一样的?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

4 个回复

倒序浏览
1. 将一个值类型变量赋值给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对对象的引用,而不复制对象本身;
2. 值类型不可能派生出新的类型:所有的值类型均隐式派生自System.ValueType。但与引用类型相同的是,结构也可以实现接口。
3. 值类型不可能包含null值:然而,可空类型功能允许将null赋给值类型;
4. 每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。
回复 使用道具 举报
直白点儿说:值类型就是现金,要用直接用;引用类型是存折,要用还得先去银行取现。

声明一个值类型变量,编译器会在栈上分配一个空间,这个空间对应着该值类型变量,空间里存储的就是该变量的值。引用类型的实例分配在堆上,新建一个引用类型实例,得到的变量值对应的是该实例的内存分配地址,这就像您的银行账号一样。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
所有值类型都继承自System.ValueType,但是ValueType没有附加System.Object包含之外其它任何方法,不过它倒是改写了Equals和GetHashCode两个方法。引用类型变量的Equals比较的是二者的引用地址而不是内部的值,值类型变量的Equals方法比较的是二者的值
值类型不能作为其它任何类型的基类型,因此不能向值类型中增加任何新的虚方法,更不该有任何抽象方法,不可重写

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
值类型的变量本身就存储着“实例”的内容,即变量的内容就是值本身,有几个变量就有几份值;-而引用类型的变量,存储的是该引用实例在内存中的首地址,即变量的内容只是个内存地址,多个变量可以指向同一个实例。

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

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

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