首页 > 代码库 > ==运算符是判断栈中两个值是否相等

==运算符是判断栈中两个值是否相等

默认情况下(也即类型没有重载==运算符的情况下),==运算符是判断栈中两个值是否相等。为了验证这个结论,来看下面的程序:

namespace JudgeEquals
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 10;
            int b = 10;
            Console.WriteLine(a==b);

            string s1 = "abc";
            string s2 = "abc";
            Console.WriteLine(s1==s2);

            Person p1 = new Person();
            Person p2 = new Person();
            Console.WriteLine(p1==p2);
            Console.ReadKey();

        }
    }

    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public string Email { get; set; }
    }
}

以上程序运行结果如下:

技术分享
在Main方法中的Console.ReadKey();行加一个断点,然后按进行调试。然后在Immediate Window里分别输入&a,&b,&s1,&s2,&p1,&p2可以得到如下信息:

技术分享

由此可以得出,==运算符是判断栈中两个值是否相等。不过你可能会有另外一个疑问,那就是为什么s1和s2两个存储的地址是一样呢?简单点说就是CLR维护了一个字符串常量驻留池,每当创建一个新的字符串常量前,CLR都会去驻留池中查询这个字符串常量是否已经存在。如果存在就返回相应的地址;否则就创建新的字符串常量并返回。

==运算符是判断栈中两个值是否相等