两个对象是否为同一个对象:是看两个对象是否指向堆中的同一块内存。

1、使用object.ReferenceEquals()

class Program
{
static void Main(string[] args)
{
Person p1 = new Person();
p1.Name = "Mark";
Person p2 = new Person();
p2.Name = "Marl";
Person p3 = p1;
Console.WriteLine(object.ReferenceEquals(p1,p2));
Console.WriteLine(object.ReferenceEquals(p1,p3)); }
class Person
{
public string Name { get; set; }
}
}
   //结果:false。
        true

2.使用object.equals()

class Program
{
static void Main(string[] args)
{
Person p1 = new Person();
p1.Name = "Mark";
Person p2 = new Person();
p2.Name = "Marl";
Person p3 = p1;
Console.WriteLine(p1.Equals(p2));
Console.WriteLine(p1.Equals(p3)); }
class Person
{
public string Name { get; set; }
}
}
  //结果同上

3、使用==    得到同样的结果。

目前来看,这三个方法都能判断两个对象是否为同一个对象。但是:

static void Main(string[] args)
{
string s1 = new string(new char[] { 'a', 'b' });
string s2 = new string(new char[] { 'a', 'b' });
Console.WriteLine(s1==s2);//true
Console.WriteLine(s1.Equals(s2));//true
Console.WriteLine(object.ReferenceEquals(s1,s2));//false
}

这两个s1,s2是两个不同的对象,因为new了两次,在堆中存在两块不同的内存。

总结:

Equals:内部是判断两个对象中的值是否一样。

==:内部还是调用的equals方法,所以应该同上。

所以用第一种。

C#比较两个对象是否为同一个对象。的更多相关文章

  1. C#比较两个对象是否为同一个对象。 Visual Studio调试器指南---多线程应用程序调试(一)

    两个对象是否为同一个对象:是看两个对象是否指向堆中的同一块内存. 1.使用object.ReferenceEquals() class Program { static void Main(strin ...

  2. 编写Java程序,比较两个Dog对象是否为同一个对象

    返回本章节 返回作业目录 需求说明: 重写Dog类的equals(Object obj)方法. 如果equals(Object obj)中obj为Dog类型,则判断当前 对象的dogName与obj对 ...

  3. ext.net 这两个id不是同一个对象,小心!

    今天遇到了一个很奇怪的问题,查到最后发现是下面代码原因 代码中使用store存储js对象 mcp_liststore.data.items[3].id mcp_liststore.data.get(3 ...

  4. java双线程调用同一个对象+锁

    两个线程(Thread)调用同一个对象(使用Runnable接口的对象ThreadJob) 误区:下一个线程会从上一个线程结束的地方开始 正解:如 public domd implements Run ...

  5. Java中两个线程是否可以同时访问同一个对象的两个不同的synchronized方法?

    不可以!!! 多个线程访问同一个类的synchronized方法时, 都是串行执行的 ! 就算有多个cpu也不例外 ! synchronized方法使用了类java的内置锁, 即锁住的是方法所属对象本 ...

  6. java 多线程访问同一个对象数据保护的问题

    java 多线程同时访问统一个数据的时候,会引起一些错误,后面的线程会修改数据,而前面的线程还在使用修改前的内容, 使用 synchronized 关键字,保证代码块只能有一个线程来访问 public ...

  7. Archive将多个对象归档到同一个文件

    使用archiveRootObject:toFile:方法能够将一个对象直接写入到一个文件里.但有时候可能想将多个对象写入到同一个文件里,那么就要使用NSData来进行归档对象. NSData能够为一 ...

  8. Java 多个引用类型变量引用同一个对象

    引用类型变量在声明后必须引用对象才能使用. 一个引用变量只能唯一指向一个对象,但同一个对象可被多个引用类型变量引用. 如:MyDate today; //将变量跟配给一个保存引用的空间(栈) toda ...

  9. java内置锁实现锁住代码块方案(同一个对象或锁住整个类.class)

    我们看一个例子: class Demo { public synchronized void test() { System.out.println("test方法开始执行,当前线程为:&q ...

随机推荐

  1. openXML向Word插入表

    表是 Word 中的另一类型的块级内容,它是以行和列排列的一组段落(以及其他块级内容). Word 中的表格通过 tbl 元素定义,该元素类似于 HTML <表格>标记. 表元素指定文档中 ...

  2. GC算法基础

    寻找垃圾对象的算法:1. 引用计数(无法处理循环引用) 2. 根寻法(被广泛引用在gc算法中) 清理垃圾的算法: 1. 标记复制  2. 标记清理  3. 标记整理 分代算法的好处: 1. 分代处理, ...

  3. .Net Trace->Listeners->Remove

    今天在调试一个别人写的ASP.NET老程序,log文件怎么都写不了.web.config里的trace->listeners里有这么一行: <remove type="Syste ...

  4. python计时器类

    import time as t class MyTimer(): def __init__(self): self.unit = ['年', '月', '日', '时', '分', '秒'] sel ...

  5. access纯jdbc连接

    Class.forName("com.hxtt.sql.access.AccessDriver"); String url = "jdbc:Access:///c:/a/ ...

  6. Android中弹出dialog后无法捕捉back键

    一.需求 在Android开发过程中,弹出dialog后无法捕捉back键,点击back按键无响应. 二.解决方案 原因:弹出dialog后,activity失去焦点,dialog获得当前焦点. 解决 ...

  7. Java的简单类型不能够精确的对浮点数进行运算

    由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精确的浮点数运算,包括加减乘除和四舍五入. import java.math.BigDecimal; /** * 由于Java的简单类 ...

  8. python爬虫学习之查询IP地址对应的归属地

    话不多说,直接上代码吧. import requests def getIpAddr(url): response = requests.get(url) response.encoding=resp ...

  9. Jquery中attr()与prop()的区别

    在jQuery中,attr()函数和prop()函数都用于设置或获取指定的属性,它们的参数和用法也几乎完全相同.但是,这两个函数的用处却并不相同.下面我们来详细介绍这两个函数之间的区别. 1.操作对象 ...

  10. MapReduce多种join实现实例分析(一)

    一.概述    对于RDBMS中的join操作大伙一定非常熟悉,写sql的时候要十分注意细节,稍有差池就会耗时巨久造成很大的性能瓶颈,而在Hadoop中使用MapReduce框架进行join的操作时同 ...