【CLR】奇妙的String

-

一、背景

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

      var A = "ab" + "c";

      var B = "abc";

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

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

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

  3. 以下代码的HashCode是否相同,他们是否是同个对象: 

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

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

      var A = string.Intern(B);

 

二、结果:

  // 因为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是一样的;

转载于:https://www.cnblogs.com/smlAnt/p/3493380.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值