object s1=new string(new char[] {'a'});
object s2=new string(new char[] {'a'}); object a=new object();
object b=new object(); Response.Write(s1==s2)false//false
Response.Write(s1.Equals(s2))//true Response.Write(a==b)true//false
Response.Write(a.Equals(b))//false用MSDN官方的说明:对于预定义的值类型,如果操作数的值相等,则相等运算符 (==) 返回 true,否则返回 false。对于 string 以外的引用类型,如果两个操作数引用同一个对象,则 == 返回 true。对于 string 类型,== 比较字符串的值。
个人理解为:
S1和S2由于S1和S2所分配的地址上储存的是2个不同对象的内存地址所以S1==S2返回FALSE,Equals比较的是S1和S2储存空间里储存的对象地址对应的对象的内容是否相同,而这2个对象的内容都为 'a' 所以S1.Equals(S2)返回true ;a和b由于分配的给A和B的内存控件里储存的是2个不同对象的内存地址所以A和B是不同的。但是a.Equals(b)比较的是两个操作数是否引用同一个对象,也就是说A和B储存空间里储存的对象地址对应的对象的内容是否相同。A和B储存了2个地址是2个不同的对象的地址,但是这2个对象都是new object();他们的内容应该是一样啊为什么会返回FALSE 这就想不通了;很想请教下Equals对于除string以外的对象 是怎么比较对象是否相同的 是判断对象的储存空间上的被引用对象内存地址是否相同;还是判断储存空间上对应地址的对象的内容是否相同,如果是这样判断那么又是怎么判断对象是否相同,是先看对象是否是string,如是string 则判断值是否相同,否者判断OBJECT的类型和此对象储存空间里储存的内容是否相同 虽然做了几年的开发了,但是一只没有太关注过这个问题,最近突然看到有人提问,就去看看结果自己弄迷糊了。希望各位大侠指点,最好能具体点原理一点。 谢谢了~
解决方案 »
- C# WinForm 如何加载Excel文件(是原文件,不要转化成DataTable之类的),用什么控件?
- 求一正则算法
- 如何把datagridview中的内容添加到sql中
- 急!!!WMI起的远程进程如何修改它的MaximumWorkingSetSize和PeakWorkingSetSize
- 如何调试msmq消息队列程序
- 求教一个关于获取目录下子目录和文件的问题和listview控件的问题。
- 我想要mainMenu控件某一列里面的內容是從据庫里面取出來的﹐怎么弄?
- 谁帮帮忙,DataGrid 如何设置让第一列为1,2,3,4,
- 关于线程函数中的值能否返回的问题。
- c#里面注销的时候怎么对Session进行删除操作
- 求C# Winfrom中打开PDF文件
- C#####WPF调用UDP通信
void Method() {
Object Obj1 = new Object();
Object Obj2 = new Object();
Console.WriteLine(Obj1.Equals(Obj2)); //===> false
Obj2 = Obj1;
Console.WriteLine(Obj1.Equals(Obj2)); //===> true
}
}
// == 使用的是 Object.ReferenceEquals 方法
// 而 Equals 方法已经被 String 类给重载了,内部会判断实际内容
Equal 方法已经被 String 类给重载了,内部会判断实际内容
S1 S2的实际内容相同 返回TRUE但是 A和B 都是创建了一个空对象,并没有初始化,a.Equals(b)这个时候和a==b其实是等同的 都是两个对象的判断
string重写了这个方法,所以S1.Equals(S2)返回true