==一般是对数值的比较,比如 int i = 34, if (i==45)else ...或者是char i='a'; if (i=='a')else, 但是如果要比较其他的object的话,就要用equals,最常见的是String,比如
String s = "Dfdfd"; if (s.equals("ddfdf"))else{...},一般都是这样进行比较的。
String s = "Dfdfd"; if (s.equals("ddfdf"))else{...},一般都是这样进行比较的。
自从学习C#后,使用中我都用==,感觉不出equals有何用.只是觉得equals是.net framework中自带的,就如C#中的typeof与.NET Framework中的方法GetType 也有类似的关系!
public class Test
{
static void Main()
{
// Create two equal but distinct strings
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));
// Now let's see what happens with the same tests but
// with variables of type object
object c = a;
object d = b;
Console.WriteLine (c==d);
Console.WriteLine (c.Equals(d));
}
}结果是:True
True
False
True第三行是 False,原因在于编译器不知道 c 和 d 的内容都是字符串引用,因而只能调用 == 的非重载版本。因为它们是对不同字符串的引用,所以恒等运算符返回 False。那么,应该如何区别使用这些运算符呢?我的准则是:对于几乎所有引用类型,当您希望测试相等性而不是引用一致性时,请使用 Equals。例外的情况是字符串 - 使用 == 比较字符串确实会使事情简单得多,而且代码可读性更好,但是 您需要记住,该运算符的两端都必须是类型字符串表达式,才能使比较正常进行。对于值类型,我通常使用 ==,因为除非值类型本身包含引用类型(这种情况极为罕见),否则是恒等还是相等的问题无关紧要。
我的两个指向不同地址的类对象,内容完全一致,但Equals却返回false,是不是因为没有重载方法的缘故?
可以区别两个字符串要不要区分大小写
Object 类 | Object 成员 | System 命名空间 | C++ 托管扩展编程
语言
C#C++JScriptVisual Basic全部显示
确定两个 Object 实例是否相等。重载列表
确定指定的 Object 是否等于当前的 Object。受 .NET Framework 精简版的支持。[Visual Basic] Overloads Public Overridable Function Equals(Object) As Boolean
[C#] public virtual bool Equals(object);
[C++] public: virtual bool Equals(Object*);
[JScript] public function Equals(Object) : Boolean;
确定指定的 Object 实例是否被视为相等。[Visual Basic] Overloads Public Shared Function Equals(Object, Object) As Boolean
[C#] public static bool Equals(object, object);
[C++] public: static bool Equals(Object*, Object*);
[JScript] public static function Equals(Object, Object) : Boolean;
示例
[C#, JScript] 下面的代码示例比较不同的对象。[C#, JScript] 注意 此示例显示如何使用 Equals 的一个重载版本。有关其他可用示例,请参阅单独的重载主题。
[C#]
using System;public class MyClass {
public static void Main() {
string s1 = "Tom";
string s2 = "Carol";
Console.WriteLine("Object.Equals(\"{0}\", \"{1}\") => {2}",
s1, s2, Object.Equals(s1, s2)); s1 = "Tom";
s2 = "Tom";
Console.WriteLine("Object.Equals(\"{0}\", \"{1}\") => {2}",
s1, s2, Object.Equals(s1, s2)); s1 = null;
s2 = "Tom";
Console.WriteLine("Object.Equals(null, \"{1}\") => {2}",
s1, s2, Object.Equals(s1, s2)); s1 = "Carol";
s2 = null;
Console.WriteLine("Object.Equals(\"{0}\", null) => {2}",
s1, s2, Object.Equals(s1, s2)); s1 = null;
s2 = null;
Console.WriteLine("Object.Equals(null, null) => {2}",
s1, s2, Object.Equals(s1, s2));
}
}
/*This code produces the following output.Object.Equals("Tom", "Carol") => False
Object.Equals("Tom", "Tom") => True
Object.Equals(null, "Tom") => False
Object.Equals("Carol", null) => False
Object.Equals(null, null) => True*/[JScript]
import Systempackage Equals0
{ public class MyClass {
public static function Main() {
var s1 : String = "Tom";
var s2 : String = "Carol";
var array : Object [] = new Object[3]; array[0] = s1;
array[1] = s2;
array[2] = System.Object.Equals(s1, s2); Console.WriteLine("Object.Equals('{0}', '{1}') => {2}",
array); s1 = "Tom";
s2 = "Tom";
array[0] = s1;
array[1] = s2;
array[2] = System.Object.Equals(s1, s2);
Console.WriteLine("Object.Equals('{0}', '{1}') => {2}",
array); s1 = null;
s2 = "Tom";
array[0] = s1;
array[1] = s2;
array[2] = System.Object.Equals(s1, s2);
Console.WriteLine("Object.Equals(null, '{1}') => {2}",
array); s1 = "Carol";
s2 = null;
array[0] = s1;
array[1] = s2;
array[2] = System.Object.Equals(s1, s2);
Console.WriteLine("Object.Equals('{0}', null) => {2}",
array); s1 = null;
s2 = null;
array[0] = s1;
array[1] = s2;
array[2] = System.Object.Equals(s1, s2);
Console.WriteLine("Object.Equals(null, null) => {2}",
array);
}
}}Equals0.MyClass.Main();
/*This code produces the following output.Object.Equals("Tom", "Carol") => False
Object.Equals("Tom", "Tom") => True
Object.Equals(null, "Tom") => False
Object.Equals("Carol", null) => False
Object.Equals(null, null) => True*/[Visual Basic, C++] 没有可用于 Visual Basic 或 C++ 的示例。若要查看 C# 或 JScript 示例,请单击页左上角的“语言筛选器”按钮 。请参见
Object 类 | Object 成员 | System 命名空间 | C++ 托管扩展编程
--------------------------------------------------------------------------------发送有关此主题的意见 © 2001-2002 Microsoft Corporation。保留所有权利。