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

  • 相关阅读:
    github上用golang写的项目
    golang项目:goa和micro
    lua远程调试,跨平台支持N多平台
    谈谈逆向android里面的so
    windows server 2016安装
    skynet记录7:第一个服务logger和第二个服务bootstrap
    skynet记录7:服务(c和lua)
    skynet记录6:定时器
    skynet记录5:框架综述
    skynet记录4:简单demo分析
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/4913119.html
Copyright © 2020-2023  润新知