对象的相等性很好理解,就是两个对象完全一样,但是对象的同一性可能就不是很好理解了。不多说废话,直接上代码。
static void Main(string[] args) { Person p1 = new Person(); Person p2 = new Person(); Person p3 = p1; Console.WriteLine($"p1 == p2: {p1 == p2}"); Console.WriteLine($"p1 == p3: {p1 == p3}"); Console.WriteLine($"p1.Equals(p3): {p1.Equals(p3)}"); Console.Read(); }
结果:
从上面的打印结果看出,p1与p2是不相等的,p1与p3是相等的,且“==”的作用与Equals是一样的。
个人分析,p1和p2是new出来的两个对象,都未进行赋值,那么他们各属性(通常讲是自定义的)的值应该是一样的,而内存地址不相同,所以他们不相等;而p3是直接引用的p1对象,结果上是相等的。
像p1和p2的这种情况称为同一性,p1和p3称为对象的相等性。