这要从string类型的内存驻留机制说起,这也是CLR对其进行优化的一种方式

#region string类型特殊的内存驻留机制//string类型的特殊之处就在于CLR之中做的相关的优化//当有多个字符串变量包含了同样的字符串实际值时,//CLR可能不会为它们重复地分配内存,而是让它们统统指向同一个字符串对象实例。string strA = "Hello";string strB = "Hello";Console.WriteLine(Object.Equals((Object)strA, (Object)strB));Console.WriteLine(Object.ReferenceEquals((Object)strA, (Object)strB));Console.WriteLine(strA.GetHashCode());Console.WriteLine(strB.GetHashCode());string str1 = "Hello";string str2 = "Hello";Console.WriteLine(Object.ReferenceEquals(str1, str2));//关于驻留池 字面声明的变量没有检查驻留池StringBuilder sbr = new StringBuilder();sbr.Append("He").Append("llo");string str3 = "Hello";string str4 = sbr.ToString();Console.WriteLine(Object.ReferenceEquals(str3, str4)); //返回false,虽然两个字符串的值相同,但是在内存中式不相同的两个引用
Console.WriteLine(Object.ReferenceEquals(str3, str1));//强制CLR检查驻留池StringBuilder sbr2 = new StringBuilder();sbr2.Append("He").Append("llo");string str5 = "Hello";//在转换之后进行检查,时候有相同的字符串在内存中,如果存在,就返回一个指向它的引用string str6 = String.Intern(sbr2.ToString());Console.WriteLine(Object.ReferenceEquals(str5, str6));#endregion

转载于:https://www.cnblogs.com/Sky-cloudless/archive/2012/05/16/2503368.html

为什么说string是引用类型,但是又有值类型的特点呢?相关推荐

  1. java值类型和引用类型 == 比较,Java中值类型和引用类型的比较与问题解决

    一.问题描述 前几天因为一个需求出现了Bug.说高级点也挺高级,说白点也很简单.其实也就是一个很简单的Java基础入门时候的值类型和引用类型的区别.只是开发的时候由于自己的问题,导致小问题的出现.还好 ...

  2. python中的引用类型_Python中的值类型与引用类型

    其实各个标准资料中没有说明Python有值类型和引用类型的分类,这个分类一般是C++和Java中的.但是语言是相通的,所以Python肯定也有类似的.实际上Python 的变量是没有类型的,这与以往看 ...

  3. Java值类型与引用类型的不同

    [定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值,那么调用这个方法是传入的变量的值也将改变. 值类型表示复制一个当前变量传给方法,当你 ...

  4. C#之值类型和引用类型

    本文意在巩固基础知识,并不是对其进行深入剖析,还望理解. 本文是对此项知识的整理文,有些内容来源于网络,其他为博主原创,所以难免会有一些小得瑕疵,敬请谅解. 所有示例均是博主测试过的,如有转载请标明出 ...

  5. 第2篇 C#数据类型-值类型与引用类型

    一 C#内存分配 在应用程序与操作系统之间有一个"中间人"--公共语言运行时(Common Language Runtime,CLR).它为应用程序提供内`存管理,线程管理和远程处 ...

  6. 理解C#值类型与引用类型(收藏)

    从概念上看,值类型直接存储其值,而引用类型存储对其值的引用.这两种类型存储在内存的不同地方.在C#中,我们必须在设计类型的时候就决定类型实例的行为.这种决定非常重要,用<CLR via C#&g ...

  7. C#基础_值类型引用类型(十一)

    值类型和引用类型: 值类型包括:byte,short,int,long,char,float,double,bool,struct结构 引用类型包括:类类型,接口类型和数组 等. 值类型和引用类型特点 ...

  8. c# 值类型数据与引用类型数据

    CLR支持两种基本类型:值类型和引用类型 MSDN关于值类型与引用类型的说明: 值类型(Value Type),值类型实例通常分配在线程的堆栈(stack)上,并且不包含任何指向实例数据的指针,因为变 ...

  9. 值类型 引用类型 堆栈 堆 之 异想

    看了很多值类型 和 引用类型的文章(谷歌能搜索出来的) 看了越多疑问越大,而这些资料中没有具体的说明. 问题: 1.堆栈 和 堆 分别存于计算机的哪个硬件(CPU缓存,内存,硬盘)? 2.为什么只有值 ...

  10. C#的两种类据类型:值类型和引用类型

    目录 什么是值类型,什么是引用类型 概念: 值类型和引用类型区别 什么是值类型,什么是引用类型 概念: 值类型直接存储其值,而引用类型存储对其值的引用.部署:托管堆上部署了所有引用类型. 引用类型:基 ...

最新文章

  1. 图解wordpress3.5.1最简单实现伪静态的方法
  2. 将Java EE Monolith雕刻成微服务
  3. GB18030:蒙文字符方向为什么转了90度
  4. 【React 】基于Antd Design的Switch开关选择器控件封装
  5. 主流影视网站8合一H5视频源码自动更新数据
  6. matlab ofdm系统 过采样和欠采样,样本不均衡解决方法-过采样与欠采样
  7. eclipse安卓插件ADT下载地址
  8. 免焊vga3加6接线图_高清 VGA免焊接头3+6+9 VGA快速接头 免焊公头 3排15针 15针插头...
  9. 量化新手初识Campisi模型
  10. Docker 三剑客之 Compose
  11. 学java开发需要什么配置的电脑?
  12. wps怎么把ppt里的字体一起保存_干货 | 如何快速导出PPT中的文字内容?
  13. 阿里云服务器CentOS7装机配置之路(JDK1.8,MySql8.0,MongoDb4.0.3,Openfire4.2.3,Redis)
  14. 关于一种新的空气内新冠病毒检测方式的诸多设想
  15. 面试问到mysql数据库中要存数字,怎样选择int和varchar
  16. Antlr4:使用grun命令,触发NoClassDefFoundError
  17. 93450C光驱刷机
  18. 基于matlab的磁悬浮控制系统,基于MATLAB的磁悬浮控制系统设计课件.ppt
  19. 一阶逻辑合式公式及解释
  20. 全球千亿美元市值IT企业榜单

热门文章

  1. CString转化问题
  2. 招聘启事的正确阅读方式您知多少?
  3. 移动开发:给安卓软件开发初学者简单的教程
  4. debug 和release 的区别
  5. Time stamp.
  6. 比较完整的URL验证
  7. 这是我的卡,去买个包吧
  8. 有这样的开发,产品经理跪着帮你擦汗!
  9. Redis发布订阅和Stream
  10. 消息中间件常见问题汇总