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. 简单的API应用

    对于初学系统编程,了解下系统的API是必要的: 下面这个程序实现的是将自身程序复制到windows目录和系统目录: #include<stdio.h> #include<string ...

  2. 《C语言程序设计现代方法》第4章 编程题

    1 编写一个程序,要求用户输入一个两位数,然后按数位的逆序打印出这个数. 方法一:没技术含量的 #include <stdio.h> int main() { int high, low; ...

  3. 系统内存和CPU管理、监控

    本博文的主要内容有 .系统内存管理.监控:vmstat和free -mt .系统CPU管理.监控:sar -u.mpstat.uptime linux系统内存和CPU是在系统运行的过程中不断消耗的资源 ...

  4. weekend110(Hadoop)的 第三天笔记

    (2015年1月17日) 课程目录 01-hdfs源码跟踪之打开输入流 02-hdfs源码跟踪之打开输入流总结 03-mapreduce介绍及wordcount 04-wordcount的编写和提交集 ...

  5. Preferred Java way to ping a HTTP Url for availability

    I need a monitor class that regularly checks whether a given HTTP URL is available. I can take care ...

  6. nyoj 1185 最大最小值【线段树最大值最小值维护】

    最大最小值 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 给出N个整数,执行M次询问. 对于每次询问,首先输入三个整数C.L.R: 如果C等于1,输出第L个数到第R ...

  7. PAT 1069. The Black Hole of Numbers (20)

    For any 4-digit integer except the ones with all the digits being the same, if we sort the digits in ...

  8. 利用Ajax把前端的数据封装成JSON格式发送到服务器端并写成XML格式在服务器的硬盘上

    1.首先要在前端把要发送的东西(这里是一个实例化的car对象)都准备好,利用Ajax发送到服务器端,代码如下: <html xmlns="http://www.w3.org/1999/ ...

  9. Java JDBC批处理插入数据操作(转)

    在此笔记里,我们将看到我们如何可以使用像Statement和PreparedStatement JDBC API来批量在任何数据库中插入数据.此外,我们将努力探索一些场景,如在内存不足时正常运行,以及 ...

  10. Activity中的四种启动模式

    在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. An ...