c#中 ==与equals有什么区别

baofeng0722 2009-03-24 04:40:14
c#中 ==与equals有什么区别

对于值类型、引用类型来说比较过程怎样的?

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
class Person
{
private string name;

public string Name
{
get { return name; }
set { name = value; }
}

public Person(string name)
{
this.name = name;
}
}


class Program
{
static void Main(string[] args)
{
string a = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
string b = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
Console.WriteLine(a == b);
Console.WriteLine(a.Equals(b));

object g = a;
object h = b;
Console.WriteLine(g == h);
Console.WriteLine(g.Equals(h));

Person p1 = new Person("jia");
Person p2 = new Person("jia");
Console.WriteLine(p1 == p2);
Console.WriteLine(p1.Equals(p2));


Person p3 = new Person("jia");
Person p4 = p3;
Console.WriteLine(p3 == p4);
Console.WriteLine(p3.Equals(p4));

Console.ReadLine();
}
}
}

答案为何为true true true false false false true true
...全文
2274 85 打赏 收藏 转发到动态 举报
写回复
用AI写文章
85 条回复
切换为时间正序
请发表友善的回复…
发表回复
snowlianlian 2011-10-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 benbirdar 的回复:]

在理论上,
equals 用于确定两个 Object 实例是否相等。
== 用于确定两个同类型的值是否相等!

然而,事实上,在.net以后的版本中,如果两个对象可以 ==,那么它们一定是 equals 的!
在现在的.net中,equals 于 == 已经完全没有区别!

不信大家可以去做个试验,
创建两个不同的对象,让它们的值相等,看它们是否 equals !

[/Quote]


好像真的是的喔。
paven627 2010-04-14
  • 打赏
  • 举报
回复
人家问的C#, 就是有很多不懂装懂的人拿 JAVA来说事,比如10楼
zhentiant 2010-03-16
  • 打赏
  • 举报
回复
mark
ivinkoo 2009-03-27
  • 打赏
  • 举报
回复
顶~~~
YSEE 2009-03-27
  • 打赏
  • 举报
回复
在比较的时候 要注意 是否对象比较 还是 值比较
armarrest0 2009-03-27
  • 打赏
  • 举报
回复
==是两个值对比,equals是两个object对象的对比,相同的看法
xuancheng999 2009-03-27
  • 打赏
  • 举报
回复
老师 教过
== 是比较值
Equals 是比较地址

初学 初学
BOOKOOK 2009-03-27
  • 打赏
  • 举报
回复
我也顶一个
yzhongshan 2009-03-27
  • 打赏
  • 举报
回复
我想说的,大家都说了,up 一下。。。。
readfuture 2009-03-26
  • 打赏
  • 举报
回复
学习
yooyoozoo 2009-03-26
  • 打赏
  • 举报
回复
java有区别 c#好像不是很大~!
zou_bk 2009-03-26
  • 打赏
  • 举报
回复
==是不是算是ReferenceEquals
yuji821 2009-03-26
  • 打赏
  • 举报
回复
学习下
qinggeer 2009-03-26
  • 打赏
  • 举报
回复
呵呵。来学习,收藏一下。
china_west 2009-03-26
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ojlovecd 的回复:]
MSDN中就有介绍啊:
下面的规则概括了 Equals 方法和等号运算符 (==) 的实现准则:

每次实现 Equals 方法时都实现 GetHashCode 方法。这可以使 Equals 和 GetHashCode 保持同步。

每次实现相等运算符 (==) 时,都重写 Equals 方法,使它们执行同样的操作。这样,使用 Equals 方法的基础结构代码(如 Hashtable 和 ArrayList)的行为就与用相等运算符编写的用户代码相同。

每次实现 IComparable 时都要重写 Equals …
[/Quote]
msdn权威
gogogo 2009-03-26
  • 打赏
  • 举报
回复
高手多,学习下,收藏
ping1860 2009-03-26
  • 打赏
  • 举报
回复
好贴,顶学习.
moonshineidolon 2009-03-26
  • 打赏
  • 举报
回复
C#下

==是两个值对比,equals是两个object对象的对比

每次实现 Equals 方法时都实现 GetHashCode 方法。这可以使 Equals 和 GetHashCode 保持同步。

每次实现相等运算符 (==) 时,都重写 Equals 方法,使它们执行同样的操作。这样,使用 Equals 方法的基础结构代码(如 Hashtable 和 ArrayList)的行为就与用相等运算符编写的用户代码相同。

每次实现 IComparable 时都要重写 Equals …
a7312555 2009-03-26
  • 打赏
  • 举报
回复
应该相差不大吧。。我一般写代码都是随着心情来的
zhizlm 2009-03-25
  • 打赏
  • 举报
回复
C# 是相同的。 但是在java 里 就像一楼说的
加载更多回复(64)

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧