描述
对于比较值类型, string 类型 2 者无区别.
引用类型, Equals 比较的是二者指向内容是否一致;
== 比较二者的地址是否是同一个地址.
详细
1. 对于值类型,== 和 Equals()等价, 都是比较存储信息的内容(即比较两个对象的值是否相同);
2. 对于除 string 之外的引用类型,== 比较的是栈的内容是否相同 (即是否指向同一个堆中地址),Equals() 判断是否对同一个对象的引用(即堆中的内容是否相同);
3. string 是一种特殊的引用类型, 在 C# 语言中, 重载了 Object 对象的很多方法 (包括 equals() 方法), 使 string 对象用起来就像是值类型一样
下图为 string 类中重载的 Equals 方法描述:
4. 对于一些自定义类, 我们看看是否有重载 Equals 方法, 如果没有则默认为基类的 Equals 方法(如果基类没有重载 Equals 方法则为 Object 类 Equals 方法),Object 类中 Equals 方法比较也是栈中的地址, 而不是堆中的内容.
下图为 Object 类中 Equals 方法描述:
来源: http://www.bubuko.com/infodetail-2963788.html