转载:ReferenceEquals, == , Equals 区别
Equals , == , ReferenceEquals都可以用于判断两个对象的个体是不是相等。
ReferenceEquals是Object的静态方法,用于比较两个引用类型的对象是否是对于同一个对象的引用。对于值类型它总是返回false。(因为Box以后的对象总是不同的,hehe)
对于内置值类型,==判断的是两个对象的代数值是否相等。它会根据需要自动进行必要的类型转换,并根据两个对象的值是否相等返回true或者false。例如:
Double b =100;
Console.WriteLine(“equal supports compare between different types!”);
equal supports compare between different types!
Struct Userstruct1;
Userstruct1 a;
Userstruct1 b;
Console.WriteLine(“can == reach this far?”)
Equals它有静态方法和可重载的一个版本,下面的程序片断解释了这两个方法的用法,
int b = 5;
// you can also use if(a.Equals(b))
{
Console.WriteLine(“a is equal to b”);
}
a.Append("the test a");
String s1 = a.ToString();
String s2 = "the test a";
Console.WriteLine("== returns true");
{
Console.WriteLine("equals returns true");
}
{
Console.WriteLine("ReferenceEquals returns true");
}
== returns true
equals returns true
因为默认的,String对于声明的相同的字符串在堆上只保留一个Copy,所以s1与s2将会指向相同的Reference
在C#中,有多种比较方法,有referenceequal,equals,equalsto,但他们之间是有细微差别的。
object o = null;
object p = null;
object q = new Object();
p = q;
Console.WriteLine(Object.ReferenceEquals(p, q));
Console.WriteLine(Object.ReferenceEquals(o, p));
}
如果要是对象都指向空引用,那么它返回true,另外,p=q;这个赋值语句,对于值类型来说,只是把地址复制给了p,并没有深拷贝。所以当比较引用时,返回true。如果比较o.equals(p),那么编译器会报错,因为equals方法不能比较null的情况。正因为如此,referenceequals方法才不受开发人员欢迎。另外,equals为实例的虚方法,referenceequals为静态方法。基元类型的==,就是操作符重载,使用的 equals方法判等。当然,还有一个equals的静态方法,静态equals与实例equals方法的唯一区别是:实例equals在对2个进行比较时,如果有一个为null,或者都是null,就会抛出异常,但静态equals方法不会,静态equals方法首先对2者检查是否为null,如果有为null的情况,就返回false,如果没有null,那么就调用实例equals方法来进行比较。
出自 51CTO.COM博客
转载于:https://www.cnblogs.com/leosky2008/archive/2007/07/12/814818.html
转载:ReferenceEquals, == , Equals 区别相关推荐
- Equals,ReferenceEquals,==的区别
Equals,ReferenceEquals,==的区别 在.net中有几种比较相等的方法 object的静态ReferenceEquals() object的静态Equals() object的示例 ...
- C#和Java中“==”和“equals”区别
C#中"=="和"equals"区别如下: 1 using System; 2 class Program 3 { 4 public static void M ...
- equalsignorecase和equals区别
今天写代码,突然忘了equalsignorecase和equals区别,赶紧记录一下. 先下结论: 区别:equals()是Object类中定义的方法,判断两个对象是不是"相等", ...
- == Equals ReferenceEquals 的区别
.net 中有几种比较相等的方法 object 的静态ReferenceEquals() object 的静态Equals() object 的实例Equals() 运算符== Object 中的cl ...
- C# == 和equals()区别
如以下代码: ? 1 2 3 4 5 int age = 25; short newAge = 25; Console.WriteLine(age == newAge); //true Consol ...
- 转载------------java equals 方法
作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 ...
- java之==和equals区别
2019独角兽企业重金招聘Python工程师标准>>> "=="操作符的作用 1.用于基本数据类型的比较 2.判断引用是否指向堆内存的同一块地址. equals所 ...
- '=='和equals区别以及jvm内存分配
"=="和equals方法究竟有什么区别? 比较之前先了解一些背景 (1)Java中内存分配模型 java的内存模型主要分三种, 栈:每个栈中的数据(原始类型和对象引用)都是私有的 ...
- Java中的==和equals区别
概述: A.==可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同:当用于引用类型的时候,是比较对象是否相同. B.对于String a = "a&quo ...
- java和equals区别_JAVA中==与equals的区别
equals如果没有被重写的话,和==的作用是一样的,都是判断两个对象引用是否指向同一个地址.一般重写了equals()方法就表示比较它们"实际意义上相等",比较的是内容,而不是引 ...
最新文章
- windows server 2008 r2 enterprise ,惠普DL 580 G7服务器报,事件 ID: 47错误。
- Nginx +Tomcat 实现动静态分离(转)
- 女生做产品经理好吗_女生天生就是产品经理,不服来战!
- Confluence 6 管理协同编辑 - 最大编辑者的限制
- 提升写作效率,让 Word 更好地为你所用
- 【学习笔记】概率论与数理统计 - 陈希孺--第一章.事件的概率
- 查找FB15k-237 entity id对应实体数据
- oracle11g_R2 exp imp 用法
- 微信小程序之自定义表单组件(radio)
- 娄底职业技术学院计算机老师,2019年娄底职业技术学院公开招聘教师员工拟聘人员公示...
- W3school导航条实现的两种方法
- Python:利用多种方式解微分方程(以二阶微分系统零状态响应为例)
- ECNU || 宇恒棋
- 【区块链 | Polygon】Polygon区块链PHP开发包-使用PHP语言开发Polygon
- IBM MQ Linux安装与卸载
- A Convolutional Neural Network Model for Predicting a Product’s Function, Given Its Form
- GGS-DDU 【HDU - 4966】【最小树形图】
- Linux根文件系统(rootfs原理详解)
- linux蓝牙麦克风,Linux下蓝牙立体声配置(A2DP profile)
- demo1—java读取Excel文件到数据库、java制作准考证
热门文章
- php趣味编程 - php 余弦曲线
- php $_SERVER详细参数解析
- 考前必背的50个知识点——系统集成项目管理工程师考试
- linux web目录写入权限命令,Linux下Web目录和文件安全权限设置
- Unity的序列化机制探索
- 对象用[]来获取属性的注意点
- String转为byte[] ,byte[]转为String,byte[]与String的相互转换
- c语言几个字符串排序,请教多个字符串排序(不用数组)
- 【渝粤教育】国家开放大学2018年春季 0551-22T素描(二) 参考试题
- 【渝粤教育】国家开放大学2018年春季 0550-22T素描(一) 参考试题