zoukankan      html  css  js  c++  java
  • 【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是一样的;

  • 相关阅读:
    选择学习Web前端开发的理由
    在Nginx下部署SSL证书并重定向至HTTPS
    使用pm2快速将项目部署到远程服务器
    DNS域名解析过程
    HTML5新特性总结
    基于 HTML5 Canvas 的智能安防 SCADA 巡逻模块
    react中使用css的7种方式
    原生JS实现滑动轮播图
    H5与企业微信jssdk集成
    img图片不存在显示默认图
  • 原文地址:https://www.cnblogs.com/smlAnt/p/3493380.html
Copyright © 2011-2022 走看看