设为首页收藏本站

融智技术学院

 找回密码
 注册

QQ登录

只需一步,快速开始

Xamarin Android开发实战套装大学霸内部资料
搜索
查看: 522|回复: 0

【C#每日一问】在C#中,为什么string是引用类型,却像值类型一样使用?

[复制链接]
MrLi 发表于 2014-1-2 17:00:07 | 显示全部楼层 |阅读模式
问题:
string是一个引用类型,即使它具有大部分值类型的特征,例如不可变、使用重载的==运算符比较文本而不是确保它们引用同一个对象。
为什么string不是值类型呢?

答案:
字符串不是值类型,因为它们可以存储很多数据,需要存储在堆上。值类型(在至今为止的CLR实现中)存储在堆栈上。堆栈分配的字符串将打乱各种各样的东西:堆栈只有1MB,你不得不将每个字符串装箱,增加了一份系统开销,你不能保留字符串,并且内存使用量将激增,等等。
(补充:对值类型存储添加说明是一个实现细节,将导致一种种情况,一个类型和值因为不从System.ValueType继承被警告。谢谢Ben。)

您需要登录后才可以回帖 登录 | 注册

本版积分规则

新突破电商

小黑屋|手机版|Archiver|融智技术学院 ( 京ICP备09018999号  

GMT+8, 2018-12-12 11:58

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表