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:字符串驻留
Equals Finalize GetHashCode GetType MemberwiseClone ReferenceEquals ToString String.IsInterned的更多相关文章
- Equals()和GetHashCode()方法深入了解
最近在看Jeffrey Richter的CLR Via C#,在看到GetHashCode()方法的时候,有一个地方不是特别明白,就是重写Equals()方法时为什么要把GetHashCode()方法 ...
- ( 转 ) 聊一聊C#的Equals()和GetHashCode()方法
聊一聊C#的Equals()和GetHashCode()方法 博客创建一年多,还是第一次写博文,有什么不对的地方还请多多指教. 关于这次写的内容可以说是老生长谈,百度一搜一大堆.大神可自行绕路. ...
- 聊一聊C#的Equals()和GetHashCode()方法
博客创建一年多,还是第一次写博文,有什么不对的地方还请多多指教. 关于这次写的内容可以说是老生长谈,百度一搜一大堆.大神可自行绕路. 最近在看Jeffrey Richter的CLR Via C#,在看 ...
- C#中Equals和GetHashCode
Equals和GetHashCode Equals每个实现都必须遵循以下约定: 自反性(Reflexive): x.equals(x)必须返回true. 对称性(Symmetric): x.equal ...
- 用DateTime.ToString(string format)输出不同格式的日期
http://www.cnblogs.com/xvqm00/archive/2009/02/19/1394093.html DateTime.ToString()函数有四个重载.一般用得多的就是不带参 ...
- DBNull.Value.ToString() == string.Empty
Console.WriteLine(DBNull.Value.ToString() == string.Empty); //True
- ToString(string format)输出格式简述
ToString说明 ToString 是 .NET Framework 中主要的格式化方法.它将对象转换为其字符串表现形式,使它适合于显示.(有关对 .NET Framework 中的格式设置支持的 ...
- [转]用DateTime.ToString(string format)输出不同格式的日期
DateTime.ToString()函数有四个重载.一般用得多的就是不带参数的那个了.殊不知,DateTime.ToString(string format)功能更强大,能输出不同格式的日期.以下把 ...
- 我看C#的Equals()和GetHashCode()方法
首先先谈一下Equals()这个方法: Equals()方法,来自于Object,是我们经常需要重写的方法.此方法的默认实现大概是这样的: public virtual bool Equals(obj ...
随机推荐
- JqueryEasyUI浅谈本地化应用
JqueryEasyUI浅谈本地化应用 Jquery是对javascript一种封装,使我们开发人员使用起来更加方便,同时也解决了不同浏览器中javascript的兼容性.JqueryEasyUi是基 ...
- angular-ui-bootstrap的进度条问题及解决
在测试angular-ui-bootstrap中的进度条的时候,用的是官方的示例代码,但是跑不起来. 经过代码比对之后,发现官方用的是0.14.3, 而我本地用的是0.13.3 (2015-08-09 ...
- 把HDFS里的json数据转换成csv格式
1. 全景图 2. 用ListHDFS获取所有文件名 如果想重新再取一次,右健view state: 点击 clear state, 再运行,即可再次采集数据了. 3. 用FetchH ...
- VisualSvn server 权限配置
库上,配置 EveryOne 有读写权限. 下面的文件夹,再根据情况,取消 EveryOne 的读写权限,添加另一个用户组的读写权限. 它的规则是: 子目录权限覆盖父目录权限.
- NODE-WEBKIT教程(12)全屏
node-webkit教程(12)全屏 文/玄魂 目录 node-webkit教程(12)全屏 前言 12.1 和全屏有关的三个api Window.enterFullscreen() Window ...
- 从源代码的角度分析--在BaseAdapter调用notifyDataSetChanged()之后发生了什么
导师安排我做一个小项目,其中涉及到利用Adapter作为ListView的适配器,为ListView提供数据.选中某一项后,要让这一项变成选中状态,也就是背景图片要换一下.下面我就用一个小例子来模拟. ...
- IMP-00038:无法转换为环境字符集句柄
参考解决方案:http://www.cnblogs.com/wangsaiming/p/4947151.html
- 常用dom对象
DOM:文档对象模型 --树模型 文档:标签文档,对象:文档中每个元素对象,模型:抽象化的东西 一:window: window.shuxing; 属性(值或者子对象): opener:打开当前窗口的 ...
- Linux安装snmp
1.yum安装 yum -y install net-snmp* 2.修改配置文件/etc/snmp/snmpd.conf com2sec notConfigUser default public 默 ...
- XXXXXXXX系统失败总结
2013年底因同事离职接手了他负责的<XXXXXX病例系统>,当时由3个刚毕业的同事在做,框架使用Spring+Hibernate+SpringMVC+EasyUI,因为当时的主力开发人员 ...