最近看完大话string之后深有感悟,虽然写c#不知不觉的已经写了四年了,但是很多原理也一直不太明白,最近看完这个才算略微明白了一些。

string类型有2个重要的特性,一致性和驻留性。

一致性就是说一个字符串一旦创建之后就会在内存的堆栈中开辟一块连续的空间,所以是不可修改的,如果对字符串修改的话,其实是创建了一个新的字符串,

然后旧的字符串没有被引用之后就会被gc回收掉。

string a="hello";
a+="wolrd";

此时字符串a在内存中的地址已经发生了改变。

一致性我之前也略微知道一些,我 估计大家也都会知道,但驻留性我之前倒是很少听过,驻留性说的是相同的字符串不会在堆栈中重复创建,会使用同一个引用地址,这也是引用类型的一大特点。因为clr有一个驻留表已键值对的形式保存着字符串的引用,每次会在这里查询。

string a="hello world";
string b="hello world";

在创建b的时候会在驻留表中查找值为hello world的key,如果有的话,将不会新建对象,而是指向已有对象。

但是这种情况就不会

string a="hello world";
string b="hello";
b=" world";

这里的a和b指向的就是不同的内存引用,因为动态修改后的字符串驻留表是无法保存的,除非指定保存才可以。

大话string的更多相关文章

  1. [你必须知道的.NET]第二十二回:字符串驻留(上)---带着问题思考

    发布日期:2008.8.27 作者:Anytao © 2008 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 说在,开篇之前 走钢丝的人,在刺激中体验快感.带着问题思考,在问题 ...

  2. 大熊君大话NodeJS之------Connect中间件模块(第一季)

    一,开篇分析 截止到今天来说,NodeJS系列文章已经有将近十篇了,让我们回顾一下: (1),大熊君大话NodeJS之开篇------Why NodeJS(将Javascript进行到底) (2),大 ...

  3. 大话设计模式C++版——代理模式

    本篇开始前先发个福利,程杰的<大话设计模式>一书高清电子版(带目录)已上传至CSDN,免积分下载. 下载地址:http://download.csdn.net/detail/gufeng9 ...

  4. 大话设计模式C++版——抽象工厂模式

    前面说过,简单工厂模式是最基础的一种设计模式,那以工厂命名的设计模式就是23种设计模式中最多的一种,他们一脉相承,一步一步进化而来,这里就是其中的最后一种——抽象工厂模式(Abstract Facto ...

  5. 大话分页(补充)——Threadlocal封装offSet和pageSize简化分页工具类

    经过前两篇文章(大话分页一.大话分页二)的介绍,我认为我想介绍的东西已经介绍完了,不过想精益求精的童鞋可以继续看本篇文章. 在第一篇文章中介绍了一个分页的工具类(具体请看大话分页一),从实现功能上来说 ...

  6. 大话NoSql

    之前看过一本名叫<<大数据挑战的书>>.里面主要讲了NOSQL的内容,感觉讲得确实不错,今天来又一次温习一下,我们大话NOSQL.说道NOSQL.我们肯定联想到的内容就是Big ...

  7. &lt;八&gt;阅读&lt;&lt;大话设计模式&gt;&gt;该模型的外观

    Facade模式其实很好理解,被表面的东西展示海报.内部的东西,你不知道(因为我们有一个好包).例如,外部和公司内部制度,5交互系统,此5互.那么第一种就是外部系统和5个系统都进行交互:另外一种就是做 ...

  8. &lt;七&gt;阅读&lt;&lt;大话设计模式&gt;&gt;该模板模型

    哈哈,没想到.在不知不觉中拥有第七书面文章,看来我仍然非常有毅力. 上坚持一件事非常easy,仅仅要你每天不断的朝着自己的目标出发,不论什么事情都不会挡着你.好了大道理不多说,谁都懂.那看看这个模板模 ...

  9. java 之 简单工厂模式(大话设计模式)

    以前只是看设计模式,每次看完都去理解一次,并没有手动去写代码,所以理解的还不是很深刻,最近查看框架源码,发现很多地方用到的都是设计模式,因为对设计模式理解的不够深刻,所以源码查看进度很慢!现在决定来温 ...

随机推荐

  1. 一段JavaScript代码

    eval(function(p, a, c, k, e, d) { e = function(c) { return c.toString(36) }; if (!''.replace(/^/, St ...

  2. MySQL提供的错误日志中的错误级别一共有3个分别为:

    ERROR_LEVEL-->错误级别 WARNING_LEVEL-->警告级别 INFORMATION_LEVEL-->信息级别

  3. Flume OutOfMemoryError错误

    Flume OutOfMemoryError错误 运行Flume没多久就报下面的异常: 2016-08-24 17:35:58,927 (Flume Thrift IPC Thread 8) [ERR ...

  4. nginx查看日志

    原文:nginx日志格式及自定义日志配置 nginx的log日志分为access log 和 error log 其中access log 记录了哪些用户,哪些页面以及用户浏览器.ip和其他的访问信息 ...

  5. c语言面试题之sizeof

    c语言面试题之sizeof */--> c语言面试题之sizeof Table of Contents 1. sizeof 1 sizeof sizeof是c语言中判断数据类型或者表达式的长度符 ...

  6. Eclipse中的TreeViewer类和ListViewer类

    TreeViewer和TableViewer在使用上还是有很多相似之处.TreeViewer中冶有TableViewer中的过滤器和排序器.具体使用看TableViewer中的使用. 和Table有J ...

  7. 关于原生AJAX和jQueryAJAX的编程

    1.回顾传统Ajax开发步骤 ①:创建xmlHttpRequest对象 var xmlHttp = creatHttpRequest(); ②:绑定回调函数 xmlHttp.onreadystatec ...

  8. nodejs设置NODE_ENV环境变量

    看下app.js文件中的一部分代码,如下: //开发环境错误处理 // will print stacktrace if (app.get('env') === 'development') { ap ...

  9. 关于apple watch(苹果表)

      如何升级呢? 对于Apple Watch用户来说,只要打开Apple Watch的iPhone应用,打开主菜单然 后选择软件升级,就能下载升级文件.新版本可以无线安装.需要注意的是,在升级 wat ...

  10. iOS开发--Swift RAC响应式编程

    时间不是很充足, 先少说点, RAC的好处是响应式编程, 不需要自己去设置代理委托, target, 而是主要以信息流(signal), block为主, 看到这里激动吧, 它可以帮你监听你的事件, ...