为什么说string是引用类型,但是又有值类型的特点呢?
这要从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是引用类型,但是又有值类型的特点呢?相关推荐
- java值类型和引用类型 == 比较,Java中值类型和引用类型的比较与问题解决
一.问题描述 前几天因为一个需求出现了Bug.说高级点也挺高级,说白点也很简单.其实也就是一个很简单的Java基础入门时候的值类型和引用类型的区别.只是开发的时候由于自己的问题,导致小问题的出现.还好 ...
- python中的引用类型_Python中的值类型与引用类型
其实各个标准资料中没有说明Python有值类型和引用类型的分类,这个分类一般是C++和Java中的.但是语言是相通的,所以Python肯定也有类似的.实际上Python 的变量是没有类型的,这与以往看 ...
- Java值类型与引用类型的不同
[定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值,那么调用这个方法是传入的变量的值也将改变. 值类型表示复制一个当前变量传给方法,当你 ...
- C#之值类型和引用类型
本文意在巩固基础知识,并不是对其进行深入剖析,还望理解. 本文是对此项知识的整理文,有些内容来源于网络,其他为博主原创,所以难免会有一些小得瑕疵,敬请谅解. 所有示例均是博主测试过的,如有转载请标明出 ...
- 第2篇 C#数据类型-值类型与引用类型
一 C#内存分配 在应用程序与操作系统之间有一个"中间人"--公共语言运行时(Common Language Runtime,CLR).它为应用程序提供内`存管理,线程管理和远程处 ...
- 理解C#值类型与引用类型(收藏)
从概念上看,值类型直接存储其值,而引用类型存储对其值的引用.这两种类型存储在内存的不同地方.在C#中,我们必须在设计类型的时候就决定类型实例的行为.这种决定非常重要,用<CLR via C#&g ...
- C#基础_值类型引用类型(十一)
值类型和引用类型: 值类型包括:byte,short,int,long,char,float,double,bool,struct结构 引用类型包括:类类型,接口类型和数组 等. 值类型和引用类型特点 ...
- c# 值类型数据与引用类型数据
CLR支持两种基本类型:值类型和引用类型 MSDN关于值类型与引用类型的说明: 值类型(Value Type),值类型实例通常分配在线程的堆栈(stack)上,并且不包含任何指向实例数据的指针,因为变 ...
- 值类型 引用类型 堆栈 堆 之 异想
看了很多值类型 和 引用类型的文章(谷歌能搜索出来的) 看了越多疑问越大,而这些资料中没有具体的说明. 问题: 1.堆栈 和 堆 分别存于计算机的哪个硬件(CPU缓存,内存,硬盘)? 2.为什么只有值 ...
- C#的两种类据类型:值类型和引用类型
目录 什么是值类型,什么是引用类型 概念: 值类型和引用类型区别 什么是值类型,什么是引用类型 概念: 值类型直接存储其值,而引用类型存储对其值的引用.部署:托管堆上部署了所有引用类型. 引用类型:基 ...
最新文章
- 图解wordpress3.5.1最简单实现伪静态的方法
- 将Java EE Monolith雕刻成微服务
- GB18030:蒙文字符方向为什么转了90度
- 【React 】基于Antd Design的Switch开关选择器控件封装
- 主流影视网站8合一H5视频源码自动更新数据
- matlab ofdm系统 过采样和欠采样,样本不均衡解决方法-过采样与欠采样
- eclipse安卓插件ADT下载地址
- 免焊vga3加6接线图_高清 VGA免焊接头3+6+9 VGA快速接头 免焊公头 3排15针 15针插头...
- 量化新手初识Campisi模型
- Docker 三剑客之 Compose
- 学java开发需要什么配置的电脑?
- wps怎么把ppt里的字体一起保存_干货 | 如何快速导出PPT中的文字内容?
- 阿里云服务器CentOS7装机配置之路(JDK1.8,MySql8.0,MongoDb4.0.3,Openfire4.2.3,Redis)
- 关于一种新的空气内新冠病毒检测方式的诸多设想
- 面试问到mysql数据库中要存数字,怎样选择int和varchar
- Antlr4:使用grun命令,触发NoClassDefFoundError
- 93450C光驱刷机
- 基于matlab的磁悬浮控制系统,基于MATLAB的磁悬浮控制系统设计课件.ppt
- 一阶逻辑合式公式及解释
- 全球千亿美元市值IT企业榜单