• 真不好意思,关于小猪妹(妖精)的


    引文:http://www.cnblogs.com/pigangel/archive/2004/03/22/3895.aspx

    在CSDN上的问题: http://expert.csdn.net/Expert/topic/2902/2902022.xml?temp=.5561487

    在这里重新说明一下:


    using System;

    namespace ConsoleApplication1
    {
     /// <summary>
     /// Class1 的摘要说明。
     /// </summary>
     class Class1
     {
      /// <summary>
      /// 应用程序的主入口点。
      /// </summary>
      [STAThread]
      static void Main()
      {
       string s = "Test";
       string t = string.Copy(s);
       Console.WriteLine(s == t);
       Console.WriteLine(((object)s).ToString ());
       Console.WriteLine(((object)s).GetHashCode());
       Console.WriteLine(((object)t).GetHashCode());
       Console.WriteLine(((object)s).Equals (((object)t)));
       Console.WriteLine((string)s == (string)t);
       Console.WriteLine((object)s == (object)t);

       t = "Test";
       Console.WriteLine((object)s == (object)t);
       t=t+"d";
       t=t.Substring(0,t.Length-1);
       Console.WriteLine((object)s == (object)t);
       Console.ReadLine();
      }

     }
    }

    问题是:
    第一部分:
    t = "Test";
    Console.WriteLine((object)s == (object)t);
    返回True

    第二部分
    t=t+"d";
    t=t.Substring(0,t.Length-1);
    Console.WriteLine((object)s == (object)t);
    Console.ReadLine();
    是对字符串操作了之后,重新得值.结果是False

    还有一点:在跟踪(object)s == (object)t 时候,总是显示True,


    偶的答案是:
    输出数据时,有些让人容易疑惑的地方:

    t = "Test";
    Console.WriteLine((object)s == (object)t);
    返回True

    这是因为,字符串在处理时,如果没有进行操作,就直接指向那个内存地址值.
    而在
    t=t+"d";
    t=t.Substring(0,t.Length-1);
    Console.WriteLine((object)s == (object)t);
    这里时,
    由于字符串内容发生变化,所以,CLR会重新给t分配一块内存.
    这时再用Console.WriteLine((object)s == (object)t);
    比较时,就是False了,因为它们引用的内存地址不一样.

    为什么在VS2002监视时,会是True呢?
    其实也很简单.
    是因为,VS2002它在Debug时,对于
    (object)s == (object)t
    中的
    (object)s (或(object)t)
    来说,里面只有一个String "Test"
    也就是说(object)s能让VS2002看到的只有这么一个东西.
    所以比较时,也就返回True了.







  • 相关阅读:
    tidb3.2参数优化配置整个过程
    tidb优化配置
    mysql使用docker安装
    mysql密码规则配置-配置为简单密码123456
    goaccess日志分析器使用
    c# printDialog不显示问题
    short数组写进txt
    txt文件存储问题
    c# 调用c++dll二次总结
    程序员代码开发的自测素养
  • 原文地址:https://www.cnblogs.com/sasbya/p/4892.html
Copyright © 2020-2023  润新知