Equal 和==比较
因为值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。
"==" : 操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同.
"equals" : 操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
而String是一个特殊的引用型类型,在C#语言中,重载了string 对象的很多方法方法(包括equals()方法),使string对象用起来就像是值类型一样。
string.Copy()会创建一个全新的对象。
string s1 = "abc";
string s2 = "abc";//s1和s2因为值相同,内存在只会分配一块内存abc,则s1和s2地址直接指向该内存
Console.WriteLine("s1==s2:{0}", s1 == s2); true
Console.WriteLine("s1 equal s2:{0}", s1.Equals(s2)); true
string a = "hello";
string b = "o";
string c = "helloo";
string d = a + b;
Console.WriteLine(c == d); true
Console.WriteLine(c.Equals(d));true
Console.WriteLine(ReferenceEquals(c, d));false
Student s11 = new Student(1 );
Student s22 = new Student(1);
Console.WriteLine("s11==s22:{0}", s11 == s22); false
Console.WriteLine("s11 equal s22:{0}", s11.Equals(s22));false
Equal 和==比较