zoukankan      html  css  js  c++  java
  • Equals Finalize GetHashCode GetType MemberwiseClone ReferenceEquals ToString String.IsInterned

    参考资料:

    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:字符串驻留

  • 相关阅读:
    WHERE col1=val1 AND col2=val2;index exists on col1 and col2, the appropriate rows can be fetched directly
    MySQL 交集 实现方法
    MBProgressHUD的使用
    Xcode4 使用 Organizer 分析 Crash logs(转)
    SimpleXML 使用详细例子
    PHP的XML Parser(转)
    iPhone,iPhone4,iPad程序启动画面的总结 (转)
    Pop3得到的Email 信件格式介绍
    yii总结
    隐藏Tabbar的一些方法
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/4913119.html
Copyright © 2011-2022 走看看