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的字符串,
    如果找到,则直接把该字符串的地址返回给相应的变量,
    如果没有才会在内存中新建一个字符串对象。

    
    
    
     
     
  • 相关阅读:
    java selenium (九) 常见web UI 元素操作 及API使用
    java selenium (六) XPath 定位
    java selenium (八) Selenium IDE 用法
    java selenium (五) 元素定位大全
    一个使用CSocket类的网络通信实例
    揭开链接器的面纱(中)
    揭开连接器的面纱(上)
    深入理解程序的结构
    调试利器GDB(下)
    调试利器GDB(上)
  • 原文地址:https://www.cnblogs.com/haomo/p/2499685.html
Copyright © 2011-2022 走看看