C#中为什么克隆出来的对象用equals方法比较返回false

来源:百度知道 编辑:UC知道 时间:2024/05/16 07:14:22
下面的代码:
using System;
calss Test
{
public string Data="Hello World";
public override string ToString()
{
return Data;
}
public static void Main(string[] args)
{
Test t1=new Test();
Test t2=(Test)t1.MemberwiseClone();
if(t1.Equals(t2))
{
Console.WriteLine("t1=t2");
}
else
{
Console.WriteLine("t1!=t2");
}
}
}
上面那小段代码,只有当t1和t2都转换成string类型后(t1.ToString().Equals(t2.ToString(0)),再equals比较才返回真,不明其原因,请高手指点下。。。。。。。。。。

我记得JAVA中equals是比较两者的值啊。。难道C#和JAVA不同?

比较的2种方式:
== 比较是比较2者的值
Equals 比较的是2者的地址是否相同.

克隆出来的对象是值相同.但是地址是不一样的.所以Equals返回false.

Equals 对于引用类型, 是比较内存地址的, 两者当然不一样了

string 是按值类型来比较的