C# == equals 本质理解
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 本质理解的更多相关文章
- git 命令(提高篇)的本质理解
上一篇博客:[[git 命令(提高篇)的本质理解] (http://www.cnblogs.com/juking/p/7105744.html)]介绍了Git 的基础知识 -- 提交.分支以及在提交树 ...
- 如何从编程的本质理解JVM内存模型
如何从编程的本质理解JVM内存模型 一般聊JVM内存模型都是把图截出来,然后对着图,解释上面堆.栈之类的概念.这篇将分享下,如何从编程的本质上理解,JVM内存模型是什么样子,为什么是这个样子,不再死记 ...
- 对hashmap与hashcode()、equals()的理解
1.equals方法没被重写的时候 比较的只是对象的地址 重写之后 比较的才是对象里的内容 2.重写equals的时候 务必需要重写hashcode 不然在用到容器的时候 会出现问题 因为容器会 ...
- git 命令(基础篇)的本质理解
主要命令 1. 提交,git commit 本质:创建一个节点(node),标志了当前位置(node)与以前的node存在不同之处,如下图中的 c0 <-- c1 <-- c2 等等 图中 ...
- Tomcat 部署 Web 项目的本质理解
手动创建Web项目 不借助集成开发工具IDE,直接手动创建一个Web项目,有助于理解Web项目的本质. 1.首先建立一个myweb文件夹(自己定义项目名). 2.然后可以建一个html文件(文件里面只 ...
- HashCode和equals的理解
-------------------------------------------------------------------------------------------第一篇博客---- ...
- 对hashcode、equals的理解
1.首先hashcode和equals都是java每个对象都存在的方法,因为他们两是Object的方法. 2.hashcode方法默认返回的是该对象内存地址的哈希码,然而你会发现,Object类中没有 ...
- 【代码优化】equals深入理解
覆盖equals时,遵守通用约定 对equal方法的覆盖看起来非常easy,可是有很多情况是容易导致错误,最好的避免这些错误的办法 就是不覆盖equals方法. 必须遵循的原则: 自反性--对于不论什 ...
- git 命令(补充篇)的本质理解
1 标签, git tag tag_name SHA 本质: 在某次commit 上打上标签tag_name ,标签在代码库中起着"锚点"的作用. 注意: commit 由 SHA ...
随机推荐
- File存储 - 文件存储
博客地址 http://www.cnblogs.com/mmyblogs/p/6107472.html(转载请保留) 文件存储 文件存储是 Android 中最基本的一种数据存储方式,它不对存储的内容 ...
- IOS 杂笔-4(属性与成员变量的区别)
属性可以用点语法,比如self.xxx,在外部调用也同样可以someClass.xxx. 属性实际上是对一组set和get方法的简单封装(oc的get方法没有get前缀),同样会自动生成一个私有的成员 ...
- 【转】IOS高级教程1:处理1000张图片的内存优化
转载请保留以下原文链接: http://my.oschina.net/taptale/blog/91894 一.项目需求 在实际项目中,用户在上传图片时,有时会一次性上传大量的图片.在上传图片前,我们 ...
- 招聘一个靠谱的 iOS程序员
一个靠谱的简历 简历非常能反映一个人的性格和水平,相比于你在学校获得多少奖项,工作经历.项目经 历.熟悉的技术等更加关键,如果还有博客和一些 Github 上的项目,好感度++,但记得在去面试前收拾下 ...
- Android网络编程只局域网传输文件
Android网络编程之局域网传输文件: 首先创建一个socket管理类,该类是传输文件的核心类,主要用来发送文件和接收文件 具体代码如下: package com.jiao.filesend; im ...
- spring 管理 jdbc 事务
@Transactional 业务实现类 类名上方--这个类中的方法,执行操作前会打开事务. 默认:RuntimeException 自动回滚, 可以try catch 的异常,不会滚 方法名 ...
- ppt
放映时 F5是从头开始放映, shift+F5是从当前页开始放映 在菜单->幻灯片放映->勾选 “使用演讲者视图” 就可以在播放时看到自己的备注
- C#获取HTML文件指定DIV内容
最近自己找了一个开源的博客网站,放到阿里云上,方便自己发布博客. 我一般把文章发布到博客园和QQ空间,家了这个网站后又要多发布一次,为了省事就做了一个从博客园读取文章的功能: 输入链接URL地址点击提 ...
- Progress Control with Text
原文链接:http://www.codeproject.com/Articles/80/Progress-Control-with-Text 重写的Progress 包括,设置bar前景背景颜色,设置 ...
- 更改ubuntu下mysql的密码
1.首先,进入环境中去,即 mysql -u root -p ,然后输入原始密码 2.此时会出现 mysql > 3.开始修改密码: mysql > use mysql ; ...