兩個對象是否為同一個對象:是看兩個對象是否指向堆中的同一塊記憶體。 1、使用object.ReferenceEquals() 2.使用object.equals() 3、使用== 得到同樣的結果。 目前來看,這三個方法都能判斷兩個對象是否為同一個對象。但是: 這兩個s1,s2是兩個不同的對象,因為ne ...
兩個對象是否為同一個對象:是看兩個對象是否指向堆中的同一塊記憶體。
1、使用object.ReferenceEquals()
class Program { static void Main(string[] args) { Person p1 = new Person(); p1.Name = "Mark"; Person p2 = new Person(); p2.Name = "Marl"; Person p3 = p1; Console.WriteLine(object.ReferenceEquals(p1,p2)); Console.WriteLine(object.ReferenceEquals(p1,p3)); } class Person { public string Name { get; set; } } }
//結果:false。
true
2.使用object.equals()
class Program { static void Main(string[] args) { Person p1 = new Person(); p1.Name = "Mark"; Person p2 = new Person(); p2.Name = "Marl"; Person p3 = p1; Console.WriteLine(p1.Equals(p2)); Console.WriteLine(p1.Equals(p3)); } class Person { public string Name { get; set; } } }
//結果同上
3、使用== 得到同樣的結果。
目前來看,這三個方法都能判斷兩個對象是否為同一個對象。但是:
static void Main(string[] args) { string s1 = new string(new char[] { 'a', 'b' }); string s2 = new string(new char[] { 'a', 'b' }); Console.WriteLine(s1==s2);//true Console.WriteLine(s1.Equals(s2));//true Console.WriteLine(object.ReferenceEquals(s1,s2));//false }
這兩個s1,s2是兩個不同的對象,因為new了兩次,在堆中存在兩塊不同的記憶體。
總結:
Equals:內部是判斷兩個對象中的值是否一樣。
==:內部還是調用的equals方法,所以應該同上。
所以用第一種。