首页 > 代码库 > ==运算符是判断栈中两个值是否相等
==运算符是判断栈中两个值是否相等
默认情况下(也即类型没有重载==运算符的情况下),==运算符是判断栈中两个值是否相等。为了验证这个结论,来看下面的程序:
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都会去驻留池中查询这个字符串常量是否已经存在。如果存在就返回相应的地址;否则就创建新的字符串常量并返回。
==运算符是判断栈中两个值是否相等