【CLR】奇妙的String

-

1、背景spa

  1. 如下代码的HashCode是否相同,它们是不是同个对象;对象

      var A = "ab" + "c";字符串

      var B = "abc";编译器

  2. 如下代码的HashCode是否相同,他们是不是同个对象:    string

      var A = Console.ReadLine();   //输入"abc"编译

      var B = Console.ReadLine();   //输入"abc"引用

  3. 如下代码的HashCode是否相同,他们是不是同个对象:  字符

      var A = Console.ReadLine(); //输入"abc"实例化

      var B = Console.ReadLine(); //输入"abc"ab

      var A = string.Intern(B);

 

2、结果:

  // 由于String类型对GetHashCode通过重写,因此如下的全部字符串的HashCode相同;

  1. A跟B的HashCode相同,它们为同一对象; // 由于string在编译时,编译器会把相同的string压入字符串"驻留池",因此在编译后A跟B都指向“驻留池”中同一个对象

  2. A跟B的HashCode相同,它们为不一样对象; // 由于A跟B都是在系统运行时输入的(也就是运行时实例化),因此他们是两个不一样的对象;

  3. A跟B的HashCode相同,他们为同一对象; // 由于A跟B都是系统运行时输入的,但额外执行了一步(Intern(B)),这里引用微软的一句话“若是暂存了B,则返回系统对其的引用;不然返回对值为 B 的字符串的新引用。”,因此判断结果认为A跟B是同样的;

相关文章
相关标签/搜索