参考资料:

http://blog.csdn.net/afgasdg/article/details/6889383

http://www.cnblogs.com/skyivben/archive/2010/04/18/1714933.html

http://www.cnblogs.com/sutengcn/archive/2007/03/16/677206.html

Equals:逻辑上判断对象是否相等(默认的objec是判读引用地址是否相同,如果重载后是判读对象是否相同)

ReferenceEquals:判断对象是否指向统一引用地址(等于==)

GetHashCode:CLR 5.4

对于一个值类型,如果其本身存在某个数据可以唯一标明此类型对象,有点儿像数据库中的Key字段,那么用它作为类型的第一个元素

计算类型实例的哈希码应该遵守的规则“

1)算法至少一个实例字段

2)理想情况下算法中使用的字段应该是不可变的,也就说,字段应在对象构造时初始化,在对象什么期内永不改变。

3)包含相同值的不同对象应返回相同的哈希码。

System.Object实现的GetHashCode方法对其派生类型以及类型中的字段一无所知。因此利用Object的GetHashCode方法返回的编号,可以在AppDomain中唯一性地标识对象。(其实是调用底层的RuntimeHelper类提供了一个公共的静态方法GetHashCode,它获取对一个Object的引用作为参数。)

这个编号保证在对象生存期内不会改变。但在对象被垃圾回收之后,它的唯一性的编号可能被重新用作一个新对象的哈希码。

总结:

1、equals方法用于比较对象的内容是否相等(覆盖以后)

2、hashcode方法只有在集合中用到

3、当覆盖了equals方法时,比较对象是否相等将通过覆盖后的equals方法进行比较(判断对象的内容是否相等)。

4、将对象放入到集合中时,首先判断要放入对象的hashcode值与集合中的任意一个元素的hashcode值是否相等,如果不相等直接将该对象放入集合中。如果hashcode值相等,然后再通过equals方法判断要放入对象与集合中的任意一个对象是否相等,如果equals判断不相等,直接将该元素放入到集合中,否则不放入。

5、将元素放入集合的流程图:

hash冲突:两个对象相等,hashcode也应该相等。但是两个对象不等,hashcode也有可能相等。当对象不相等但是hashcode相等的时候,就叫做hash冲突。

Finalize:

GetType:

MemberwiseClone:

ToString:

String.IsInterned:字符串驻留

Equals Finalize GetHashCode GetType MemberwiseClone ReferenceEquals ToString String.IsInterned的更多相关文章

  1. Equals()和GetHashCode()方法深入了解

    最近在看Jeffrey Richter的CLR Via C#,在看到GetHashCode()方法的时候,有一个地方不是特别明白,就是重写Equals()方法时为什么要把GetHashCode()方法 ...

  2. ( 转 ) 聊一聊C#的Equals()和GetHashCode()方法

    聊一聊C#的Equals()和GetHashCode()方法   博客创建一年多,还是第一次写博文,有什么不对的地方还请多多指教. 关于这次写的内容可以说是老生长谈,百度一搜一大堆.大神可自行绕路. ...

  3. 聊一聊C#的Equals()和GetHashCode()方法

    博客创建一年多,还是第一次写博文,有什么不对的地方还请多多指教. 关于这次写的内容可以说是老生长谈,百度一搜一大堆.大神可自行绕路. 最近在看Jeffrey Richter的CLR Via C#,在看 ...

  4. C#中Equals和GetHashCode

    Equals和GetHashCode Equals每个实现都必须遵循以下约定: 自反性(Reflexive): x.equals(x)必须返回true. 对称性(Symmetric): x.equal ...

  5. 用DateTime.ToString(string format)输出不同格式的日期

    http://www.cnblogs.com/xvqm00/archive/2009/02/19/1394093.html DateTime.ToString()函数有四个重载.一般用得多的就是不带参 ...

  6. DBNull.Value.ToString() == string.Empty

    Console.WriteLine(DBNull.Value.ToString() == string.Empty); //True

  7. ToString(string format)输出格式简述

    ToString说明 ToString 是 .NET Framework 中主要的格式化方法.它将对象转换为其字符串表现形式,使它适合于显示.(有关对 .NET Framework 中的格式设置支持的 ...

  8. [转]用DateTime.ToString(string format)输出不同格式的日期

    DateTime.ToString()函数有四个重载.一般用得多的就是不带参数的那个了.殊不知,DateTime.ToString(string format)功能更强大,能输出不同格式的日期.以下把 ...

  9. 我看C#的Equals()和GetHashCode()方法

    首先先谈一下Equals()这个方法: Equals()方法,来自于Object,是我们经常需要重写的方法.此方法的默认实现大概是这样的: public virtual bool Equals(obj ...

随机推荐

  1. 用msbuild跑xunit单元测试

    用了Visual Studio 2015之后,发现没法跑xUnit单元测试,xUnit.net runner不支持VS2015,TestDriven.Net也不支持VS2015. 等它们支持VS201 ...

  2. (转)SpringSecurity扩展User类,获取Session

    1.在session中取得spring security的登录用户名如下 ${session.SPRING_SECURITY_CONTEXT.authentication.principal.user ...

  3. [异常] JLink Error: Could not find supported CPU core on JTAG chain J-Link连接不到stm32内核问题

    >_<" 昨天晚上还好好的,今天早上调试的时候就不行了,下载程序的时候总是报J-Link连接不上,而且stm32似乎也死机了,led灯不闪烁,TFT屏也无显示. >_< ...

  4. 第八章xml学习

    1.ASP.NET和JSP的关系 ASP.NET 和JSP都是用来开发动态网站的技术,只不过ASP.NET是通过c#语言来操作的, 而JSP是通过Java语言来操作的. 2.为什么学习XML? 01. ...

  5. Zabbix学习笔记一:基本安装与配置

    1.下载安装 http://120.52.73.43/tenet.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/3.0.1/za ...

  6. 如何保证access_token长期有效

    为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等,开发者在调用这些接口时,都需要传入一个相 ...

  7. Android MonoGame坑记

    1.Content 加载声音API错误: 2.TouchPanel.GetState()属于抢占式的,用一次后面不能继续使用,否则状态尚属第一次: 3.TouchPanel 坐标来自于硬件本身: 4. ...

  8. 将数据导出到Excel2007格式。

    增加数据格式 public static void TableToExcel2(DataTable table, string filename, string sheetname) { XSSFWo ...

  9. EWM一个仓库号对应ERP多个PLANT的配置

    1. CIF多个DC到EWM系统,创建SCU并配置成仓 2. tx:/sapapo/loc3 对多个DC生成分配模型 3. IMG:分配仓库编号 去掉缺省的授权处理方 4. 维护SCU hierarc ...

  10. 软件设计之UML—UML的构成[上]

      UML是一种通用的建模语言,其表达能力相当的强,不仅可以用于软件系统的建模,而且可用于业务建模以及其它非软件系统建模.UML综合了各种面向对象方法与表示法的优点,至提出之日起就受到了广泛的重视并得 ...