c#equals相关

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 = { 1, 2, 3 };
int[] array2 = { 1, 2, 3 };
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

 
时间: 2024-10-12 17:27:05

c#equals相关的相关文章

Java集合相关面试问题和答案

Java集合相关面试问题和答案 面试试题 1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array.随着集合的广泛使用,Java1.2提出了囊括所有集合接口.实现和算法的集合框架.在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久.它还包括在Java并发包中,阻塞接口以及它们的实现.集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类.

bboss平台子系统配置及系统登录相关配置介绍

bboss平台可以包含一个主系统和多个子系统,每个子系统可以配置独立的子系统登录界面以及登录成功的跳转界面. 主系统配置: 主系统配置文件为/resources/module.xml文件,可以在module.xml中配置子系统和主系统的模块.首页及菜单 1.子系统配置 Xml代码   <subsystem name="移动门户"  id="mbp" module="module-mbp.xml" successRedirect="

详解equals()方法和hashCode()方法

前言 Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码.equals()和hashCode()都不是final方法,都可以被重写(overwrite). 本文介绍了2种方法在使用和重写时,一些需要注意的问题. 一.equal()方法 Object类中equals()方法实现如下: public boolean equals(Object obj) { return (this == obj); } 通过该实现

JavaWeb 之 重复提交表单和验证码相关的问题!

下面我们首先来说一下表单的重复提交问题,我们知道在真实的网络环境中可能受网速带宽的原因会造成页面中表单在提交的过程中出现网络的延迟等问题,从而造成多次提交的问题!下面我们就具体来分析一下造成表单提交的一些常见问题. 下面我们就来列举一下重复提交的情况: ① .当表单提交数据到一个 Servlet 中,然后 Servlet再通过请求转发到成功页面,但是此时的地址栏中的地址是到 Servlet映射中的地址,并没有跳转到成功页面相关的JSP页面中,此时刷新页面会造成再一次提交表单. ② .当在表单页面

[原创]java WEB学习笔记44:Filter 简介,模型,创建,工作原理,相关API,过滤器的部署及映射的方式,Demo

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

Collection相关内容总结

Java2中有一套设计优良的接口和类组成的Java集合框架Collection,这些类均在java.util包中. 程序员批量对数据或者对象元素处理起来非常方便,程序员可以以这个框架为基础,定义更高级别的数据抽象,如栈.队列以及线程安全的集合等等,满足工作中变化多端的需求. Java2中的集合框架,结构如下: ——————————————————————————————————————————————————————————————————————————————— Collection接口 

OAF开发中一些LOV相关技巧 (转)

原文地址:OAF开发中一些LOV相关技巧 在OAF开发中,LOV的使用频率是很高的,它由两部分构成一是页面上的LOV输入框(如OAMESSageLovInputBean),二是弹出的LOV模式窗口(OAListOfValueBean).用户选择LOV的按钮就会弹出LOV窗口,用户在LOV窗口查询并选择了值,可以返回到页面上的LOV输入框.在这里就不赘述如何创建LOV,只说一些平时会碰到的应用: 1.控制LOV的查询结果 2.LOV相关事件 3.动态LOV 4.LOV Choice一,控制LOV的

Java集合类相关面试题

1.Collection和Collections的区别 java.util.Collection 是一个集合接口,Collection接口在Java类库中有很多具体的实现,例如List.Set java.util.Collections 是针对集合类的一个帮助类,它提供了一系列的静态方法实现对各种集合的搜索.排序.线程安全化等操作. 2.ArrayList与Vector的区别 这两个类都实现了List接口(List接口继承自Collection接口).它们都是有序集合,它们内部的元素都是可以重复

spring mvc 图片上传,图片压缩、跨域解决、 按天生成目录 ,删除,限制为图片代码等相关配置

spring mvc 图片上传,跨域解决 按天生成目录 ,删除,限制为图片代码,等相关配置 fs.root=data/ #fs.root=/home/dev/fs/ #fs.root=D:/fs/ #fs.domains=182=http://172.16.100.182:18080,localhost=http://localhost:8080 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE be