zoukankan      html  css  js  c++  java
  • 大话string

        最近看完大话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指向的就是不同的内存引用,因为动态修改后的字符串驻留表是无法保存的,除非指定保存才可以。

  • 相关阅读:
    Linux如何查找大文件或目录总结
    Linux下动态调整LVM文件系统大小
    ios学习路线图
    js模块,类,继承,命名空间,私有属性等相关概念梳理
    <代码大全2>记录
    2017读书计划
    Spring声明式事务
    Spring-Aop
    Spring静态工厂和扫描器
    Spring-IOC
  • 原文地址:https://www.cnblogs.com/bjjjunjie/p/4246529.html
Copyright © 2011-2022 走看看