using System;
using System.Diagnostics;
using System.Text;
using System.Collections;
using System.Collections.Generic; class Test
{
static void print(object obj)
{
Console.WriteLine(obj);
}
class CDefOveride //C# 的所有类都默认继承于object,这里不用写继承,也可以写,有点诡异
{
public override bool Equals(object obj)//重写object.Equals(object obj),系统的string类也是这么做的
{
print("cdefoveride.equals");
return true;
}
}
static void Main()
{
string sa = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
string sb = new string(new char[] { 'h', 'e', 'l', 'l', 'o' }); print(sa.GetHashCode() + "," + sb.GetHashCode());
print(sa.Equals(sb));//true,调用string.equals(string)
print(sa == sb);//true,string的operator ==
object oa = sa;
object ob = sb;
print(oa.Equals(ob));//true, 多态调用,实际调用的是string.Equals(object)
print(oa == ob); //false object oc = new object();
object od = new object();
print(oc.Equals(od)); //false, object.equals(object)
print(oc == od);//false
//如果没有实现重写,对于引用类型,那么原始的object.equals()与 ==没有任何区别,二者总能得到一样的结果
//因为引用类型其实是一个指针,==比较的是指针的值,也就是地址,equals比较的也是地址。
//string类重写了==和equals,实现了字符串内容的比较,而非地址的比较。 object o1 = new CDefOveride();
object o2 = new CDefOveride(); print(o1.Equals(o2)); //false, 多态调用, CDefOveride.Equals(object) int ia = ;
short isa = ;
print(ia.Equals(isa)); // true, short可以转为int,故多态调用Int32.Equals(Int32 obj)
print(isa.Equals(ia)); // false, int不能直接转为short,故多态调用Int16.Equals(object obj)
} }

C# == equals 本质理解的更多相关文章

  1. git 命令(提高篇)的本质理解

    上一篇博客:[[git 命令(提高篇)的本质理解] (http://www.cnblogs.com/juking/p/7105744.html)]介绍了Git 的基础知识 -- 提交.分支以及在提交树 ...

  2. 如何从编程的本质理解JVM内存模型

    如何从编程的本质理解JVM内存模型 一般聊JVM内存模型都是把图截出来,然后对着图,解释上面堆.栈之类的概念.这篇将分享下,如何从编程的本质上理解,JVM内存模型是什么样子,为什么是这个样子,不再死记 ...

  3. 对hashmap与hashcode()、equals()的理解

    1.equals方法没被重写的时候   比较的只是对象的地址  重写之后 比较的才是对象里的内容 2.重写equals的时候 务必需要重写hashcode 不然在用到容器的时候 会出现问题 因为容器会 ...

  4. git 命令(基础篇)的本质理解

    主要命令 1. 提交,git commit 本质:创建一个节点(node),标志了当前位置(node)与以前的node存在不同之处,如下图中的 c0 <-- c1 <-- c2 等等 图中 ...

  5. Tomcat 部署 Web 项目的本质理解

    手动创建Web项目 不借助集成开发工具IDE,直接手动创建一个Web项目,有助于理解Web项目的本质. 1.首先建立一个myweb文件夹(自己定义项目名). 2.然后可以建一个html文件(文件里面只 ...

  6. HashCode和equals的理解

    -------------------------------------------------------------------------------------------第一篇博客---- ...

  7. 对hashcode、equals的理解

    1.首先hashcode和equals都是java每个对象都存在的方法,因为他们两是Object的方法. 2.hashcode方法默认返回的是该对象内存地址的哈希码,然而你会发现,Object类中没有 ...

  8. 【代码优化】equals深入理解

    覆盖equals时,遵守通用约定 对equal方法的覆盖看起来非常easy,可是有很多情况是容易导致错误,最好的避免这些错误的办法 就是不覆盖equals方法. 必须遵循的原则: 自反性--对于不论什 ...

  9. git 命令(补充篇)的本质理解

    1 标签, git tag tag_name SHA 本质: 在某次commit 上打上标签tag_name ,标签在代码库中起着"锚点"的作用. 注意: commit 由 SHA ...

随机推荐

  1. C语言接口与实现实例

    一个模块有两部分组成:接口和实现.接口指明模块要做什么,它声明了使用该模块的代码可用的标识符.类型和例程,实现指明模块是如何完成其接口声明的目标的,一个给定的模块通常只有一个接口,但是可能会有许多种实 ...

  2. DOM解析XML文件

    1.首先把第三方代码拖进工程 GDataXMLNode.h和GDataXMLNode.m这两个文件放进工程里面 2.引入libxml2库文件 3.将GDataXMLNode.h文件中的这两个东西在工程 ...

  3. 【转载】菜鸟Ubuntu下安装Android Studio

    原文:http://forum.android-studio.org/forum.php?mod=viewthread&tid=236&extra=page%3D1%26filter% ...

  4. eclipse 导入新项目后报错:Cannot change version of project facet Dynamic web module to 2.5

    错误原因: 我们用Eclipse创建Maven结构的web项目的时候选择了Artifact Id为maven-artchetype-webapp,由于这个catalog比较老,用的servlet还是2 ...

  5. Monyer.cn黑客小游戏

    花了一天的时间,Monyer给大家带来了一个有趣的东东——拥有15个关卡的黑客小游戏. 入口http://monyer.com/game/game1 因为一直以来都是大家跟我一起学习网络技术嘛,所以这 ...

  6. redis-集群(cluster)扫盲篇(一)

    什么是redis的集群 按我个人的理解,redis集群就是实现多个redis节点之间进行数据的共享. 集群有什么好处: 将数据自动split到多个节点进行存储. 当集群中的一部分节点失效或者无法进行通 ...

  7. 软件测试Lab2

    1.本次上机实验任务:使用webDriver完后自动化测试 2.本次上机实验目的:掌握webDriver的用法和配置. 3.本次上机实验内容: 3.1Selenium的安装: 首先我们上Seleniu ...

  8. [转]IOS上路_01-Win7+VMWare9+MacOSX10.8+XCode4.6.3

    本文转自:http://my.oschina.net/vigiles/blog/141689 目录[-] 1. 资源准备: 1)实体机: 2)VMWare9: 3)VM for MacOS 补丁: 4 ...

  9. 浅谈Java中的深拷贝和浅拷贝(转载)

    浅谈Java中的深拷贝和浅拷贝(转载) 原文链接: http://blog.csdn.net/tounaobun/article/details/8491392 假如说你想复制一个简单变量.很简单: ...

  10. solr性能调优

    Schema Design Considerations indexed fields indexed fields 的数量将会影响以下的一些性能: 索引时的时候的内存使用量 索引段的合并时间 优化时 ...