1、==是直接比较值类型的值或引用类型的引用地址,但==不能用于struct,struct只能用equals来比较。==一般情况下与object.equals得到的结果是相等的。

2、ReferenceEquals为Object下的静态方法,用于比较引用地址。因此所有值类型的比较都为false。string比较特殊,只要字符相等,==、equals、Object.ReferenceEquals 三者得到的结果都是true。

3、对于引用类型,如果需要进行比较,直接用equals来比较,通常都是返回false。因此需要在类中进行重写。

如果是重写object中的equals,那么最好也要重写GetHashCode,具体原因尚没有完全研究清楚,以后会补上。

也可以不重写object中的equals,可实现 IEquatable<T>  中的equals(T obj),这是一个泛型接口,所以不用对obj进行类型检查。

4、对于数组或是元组,可以进行结构比较,即比较数组或元组之间是否有相同的结构和相同的值,数组和元组都实现了IStructuralEquatable接口,该接口的equals是显式实现的。这里直接上代码吧

代码引用自:http://www.cnblogs.com/dudu/p/dotnetfx-IStructuralEquatable.html

int[] array1 = { , ,  };
int[] array2 = { , , };
Console.WriteLine(array1.Equals(array2)); //output False
Console.WriteLine(array1 == array2); //output False
IStructuralEquatable equ = array1;
Console.WriteLine(equ.Equals(array2, StructuralComparisons.StructuralEqualityComparer)); //output True
StructuralComparisons.StructuralEqualityComparer  是一个内置的默认用于比较结构的IEqualityComparer对象,这个接口下有一个Equals方法。
在这里,array1的每个元素与array2中的对应的元素,都会分别使用
IEqualityComparerc对象中的Equals方法进行比较,如果三次比较都返回true,
IStructuralEquatabl.equals返回true。
比较值类型可以用StructuralComparisons.StructuralEqualityComparer,若要比较引用类型,通常需要自己定义IEqualityComparer 5、在用object.equals进行值类型的比较时,比较a.Equals(b),如果b能隐式转换成a,那么就是可视作同类型的比较,如果不能隐式转换,则通常都是返回false

 

c#equals相关的更多相关文章

  1. 浅谈Java中的==和equals

    引言 最近在看TIJ,看到==和equals相关内容,今天就来简单的总结下. 关系操作符== 书中对关系操作符的描述是这样的:"关系操作符生成的是一个boolean结果,它们计算的是操作数的 ...

  2. java HashMap HashSet的存储方式

    今天遇到一个bug,简单的说就是把自定义对象作为key 存到HashMap中之后,经过一系列操作(没有remove操作)之后 用该对象到map中取,返回null. 然后查看了HashMap的源代码,g ...

  3. java 美团面试常见问题总

    一 基础篇 1. System.out.println(3|9)输出什么? 2. 说一下转发(Forward)和重定向(Redirect)的区别 3. 在浏览器中输入url地址到显示主页的过程,整个过 ...

  4. Java面试系列第2篇-Object类中的方法

    Java的Object是所有引用类型的父类,定义的方法按照用途可以分为以下几种: (1)构造函数 (2)hashCode() 和 equals() 函数用来判断对象是否相同 (3)wait().wai ...

  5. 集合框架-ArrayList练习(去除ArrayList集合中的重复元素)

    1 package cn.itcast.p3.arraylist.test; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; ...

  6. 嵌入式单片机STM32应用技术(课本)

    目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...

  7. equals方法相关总结

    先说一下Object类吧: 这是一个号称为祖宗类的东西,是所有类的父类,也是唯一一个没有父类的类. 接口不继承object类 并且Object类存在于java的lang包中,我们都知道存在于lang包 ...

  8. java中的字符串相关知识整理

    字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...

  9. 全文检索解决方案(lucene工具类以及sphinx相关资料)

    介绍两种全文检索的技术. 1.  lucene+ 中文分词(IK) 关于lucene的原理,在这里可以得到很好的学习. http://www.blogjava.net/zhyiwww/archive/ ...

随机推荐

  1. 转 wordpress搭建

    新建一个博客文件 在搭建博客的过程中,我们需要创建一个文件,用来存储博客的相关信息.这些信息包括域名的信息,主机空间服务器ip,FTP登录名和密码,空间面板登录信息等等,只要是与该博客有关的信息,全部 ...

  2. 近5年133个Java面试问题列表

    Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来越高级,面试官问的问题也更深入. 在我 ...

  3. useradd、passwd、userdel

    useradd是新建用户 userdel -r 是删除用户 passwd是修改密码 groupadd是新建组 groupdel是删除组 useradd yonghu  为添加用户 echo " ...

  4. Yii AR Model CRUD数据库操作

    Yii AR很好很强大,但刚开始不知道怎么使用,可以先看下官方文档 官方文档:http://www.yiichina.com/guide/database.ar 下面是我对AR的一些理解 对于一个Mo ...

  5. phpDesigner 7.2.5 注册码 更改 语法高亮 主题

    注册码: 用户名:www.xiazaiba.com 序列号:43AB0D432A29EE238CCE0F884D84D8A18498498E98298A98568AD05A0B40 验证码:7S2FF ...

  6. python手记(26)

    #!/usr/bin/env python import cv2 import sys fn="test2.jpg" if __name__ == '__main__': prin ...

  7. Eclipse非常有用的快捷键

    Eclipse有强大的编辑功能, 工欲善其事,必先利其器, 掌握Eclipse快捷键,可以大大提高工作效率. 小坦克我花了一整天时间, 精选了一些常用的快捷键操作,并且精心录制了动画, 让你一看就会. ...

  8. spring官方文档中文版

    转 http://blog.csdn.net/tangtong1/article/details/51326887 spring官方文档:http://docs.spring.io/spring/do ...

  9. String类、 StringBuffer、基本数据类型对象包装类

    一.概述 Sting s1 = "abc";    //s1是一个类类型变量,"abc"是一个对象. String s2 = new String(" ...

  10. sublime中安装sublimelinter php 语法检查

    打开控制台,install package 搜 sublimelinter 先安装sublimelinter本体 安装完以后再搜索一下,安装sublimelinter-php 接下来,打开prefer ...