Equals Finalize GetHashCode GetType MemberwiseClone ReferenceEquals ToString String.IsInterned

参考资料:

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

//bbsmax.ikafan.com/static/L3Byb3h5L2h0dHAvd3d3LmNuYmxvZ3MuY29tLw==.jpgskyivben/archive/2010/04/18/1714933.html

//bbsmax.ikafan.com/static/L3Byb3h5L2h0dHAvd3d3LmNuYmxvZ3MuY29tLw==.jpgsutengcn/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、将元素放入集合的流程图:

Equals  Finalize  GetHashCode  GetType MemberwiseClone ReferenceEquals ToString String.IsInterned

Equals  Finalize  GetHashCode  GetType MemberwiseClone ReferenceEquals ToString String.IsInterned

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

Finalize:

GetType:

MemberwiseClone:

ToString:

String.IsInterned:字符串驻留

上一篇:jenkins不能执行windows下的命令,cmd可执行。


下一篇:apache在windows下的命令安装与报错解决