zoukankan      html  css  js  c++  java
  • string 驻留机制

               string s1 = "abc";
               string s2 = "ab";
               string s3 = s2 + "c";
               string s4="abc";
    string s5="abcd";
    //求两个object的引用是否相等
     Console.WriteLine(object.ReferenceEquals(s1,s3));//false
     Console.WriteLine(object.ReferenceEquals(s1,s4));//true

    //求两个object的值是否相等
    Console.WriteLine(object.Equals(s1, s3));//true
    Console.WriteLine(object.Equals(s1, s4));//true

    Console.WriteLine(string.Equals(s1, s3));//true
    Console.WriteLine(string.Equals(s1, s4));//true

    Console.WriteLine(string.ReferenceEquals(s1, s3));//false
    Console.WriteLine(string.ReferenceEquals(s1, s4));//true

    //比较两个字符的大小
    Console.WriteLine(string.Compare(s1, s2));//1
    Console.WriteLine(string.Compare(s1, s4));//0
    Console.WriteLine(string.Compare(s1, s5));//-1

    在.Net中处理字符串时,有一个很重要的机制,叫做字符串驻留机制。
    由于string是编程中用到的频率较高的一种类型,CLR对相同的字符串,
    只分配一次内存。CLR内部维护着一块特殊的数据结构,我们叫它字符串池,
    可以把它理解成是一个HashTable,这个HashTable维护着程序中用到的一部分字符串,
    HashTable的Key是字符串的值,而Value则是字符串的内存地址。一般情况下,
    程序中如果创建一个string类型的变量,
    CLR会首先在HashTable遍历具有相同Hash Code的字符串,
    如果找到,则直接把该字符串的地址返回给相应的变量,
    如果没有才会在内存中新建一个字符串对象。

    
    
    
     
     
  • 相关阅读:
    Ubuntu 16.04中VirtualBox 5.1使用U盘/USB设备的方法
    VirtualBox中的虚拟机在Ubuntu 下无法启动之问题解决
    XX-net 部署网络
    Ubuntu 16.04安装Git及GUI客户端
    Ubuntu dns
    rapidjson
    ubuntu14.04 安装 搜狗输入法
    Ubuntu中解决机箱前置耳机没声音
    C++调试帮助
    ubuntu16.04安装virtualbox
  • 原文地址:https://www.cnblogs.com/haomo/p/2499685.html
Copyright © 2011-2022 走看看