黑马程序员技术交流社区
标题:
C#中equals和 ==的区别
[打印本页]
作者:
狄琛林
时间:
2012-9-17 10:49
标题:
C#中equals和 ==的区别
本帖最后由 狄琛林 于 2012-9-18 10:47 编辑
C#中equals和 ==的区别是什么?最好详细点啊.
作者:
许庭洲
时间:
2012-9-17 10:58
使用场景:
1.若比较两个基本类型的数值是否相等,用“==”来比较;
2.若比较两个引用变量对象的值是否相等,则要用对象的equals()方法进行比较;
作者:
孔德智
时间:
2012-9-17 11:03
Equals方法对于值类型和引用类型的定义不同,对于值类型,类型相同,并且数值相同(对于struct的每个成员都必须相同),则Equals返回true,否则返回false。而对于引用类型,默认的行为与ReferenceEquals的行为相同,仅有两个对象指向同一个Reference的时候才返回true。可以根据需要对Equals进行重载,例如String类的Equals用于判断两个字符串的内容是否相等。
StringBuilder a = new StringBuilder();
a.Append("the test a");
String s1 = a.ToString();
String s2 = "the test a";
if (s2 == s1) //为真,因为S2,S1内容相等。String类的==与Equals的行为相同,判断两个字符串的内容是否相等
Console.WriteLine("== returns true");
if (Object.Equals(s2, s1)) //为真,String类重载了Equals,用于判断两个字符串的内容是否相等
{
Console.WriteLine("equals returns true");
}
if (Object.ReferenceEquals(s2, s1)) //为假,因为s2,s1并不是指向同一个对象
{
Console.WriteLine("ReferenceEquals returns true");
}
这个实例将输出:
== returns true
equals returns true
==是一个可以重载的二元操作符,可以用于比较两个对象是否相等。
对于内置值类型,==判断的是两个对象的代数值是否相等。它会根据需要自动进行必要的类型转换,并根据两个对象的值是否相等返回true或者false。例如:
Int a = 100;
Double b =100;
If(a == b)
Console.WriteLine(“equal supports compare between different types!”);
上面这段程序将会输出:
equal supports compare between different types!
而对于用户定义的值类型,如果没有重载==操作符,==将是不能够使用的。例如:
Struct Userstruct1;
Userstruct1 a;
Userstruct1 b;
If(a == b)
Console.WriteLine(“can == reach this far?”)
上面的这段代码是不能够通过编译的。可以通过重载使==作用于用户定义的值类型。
作者:
彭张铨
时间:
2012-9-17 15:59
==是判断引用是否相同,即是否指向同一个对象
Equals默认也是判断引用,但是有的类会重写(overrid)这个方法(Object.Equals)实现特殊的比较相等
作者:
王锋华
时间:
2012-9-17 22:09
==
对于预定义的值类型,如果操作数的值相等,则相等运算符 (==) 返回真,否则,返回假。对于除 string 类型以外的引用类型,如果两个操作数引用相同的对象,则 == 返回真。对于 string 类型,== 将比较字符串的值。
确定两个 Object 实例是否相等。
Equals
确定两个 Object 实例是否相等。
另外,主要看类如何override 这个函数和如何重载运算符
作者:
mjbtdym
时间:
2012-9-17 22:57
1、对于值类型,==和equals等价,都是比较存储信息的内容。
2、对于引用类型,==比较的是引用类型在栈中的地址,equals方法则比较的是引用类型在托管堆中的存储信息的内容。
3、对于string类要特殊处理,它是一个内部已经处理好了equals方法和==的类,故==和equals等价,都是比较存储信息的内容。
4、对于一些自定义的类,我们有必要重载equals方法,否则它默认为基类的equals方法(基类没有重载Equals方法则为Object类中的Equals方法),他们的比较也为地址,而不是引用类型在托管堆中的存储信息的内容。
作者:
侍小波
时间:
2012-9-25 18:29
equals 方法(是String类从它的超类Object中继承的)被用来检测两个对象是否相等,即两个对象的内容是否相等。
==用于比较引用和比较基本数据类型时具有不同的功能:
比较基本数据类型,如果两个值相同,则结果为true
而在比较引用时,如果引用指向内存中的同一对象,结果为true
Eg:s1 = new String("sony"); //创建的是字符串对象
s1.equals("sony"); //返回
trues1 == "sony" //返回false
//如果
s1 = "sony";
s1 == "sony" //返回true
作者:
yueguhua
时间:
2012-9-27 07:56
equals相当于 == 经常用作对象和对象之间的比较
name.equals("admin")和 name=="admin" 一样
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2