|
|
|
|
|
在 C# 中,相等運(yùn)算符 ==
檢查兩個(gè)操作數(shù)是否相等,而Object.Equals()
方法檢查兩個(gè)對(duì)象實(shí)例是否相等。
在內(nèi)部,==
作為運(yùn)算符重載方法實(shí)現(xiàn),因此結(jié)果取決于該方法的重載方式。同理,Object.Equals()
方法是虛方法,結(jié)果取決于實(shí)現(xiàn)。例如,==
運(yùn)算符和.Equals()
比較兩個(gè)內(nèi)置值類型變量的值。如果兩個(gè)值相等則返回true;否則返回false。
int i = 10, j = 10;
Console.WriteLine(i == j); // true
Console.WriteLine(i.Equals(j)); // true
對(duì)于引用類型變量,==
和.Equals()
方法默認(rèn)檢查兩個(gè)兩個(gè)對(duì)象實(shí)例是否相等。但是,對(duì)于字符串類型,.Equals()
方法和 ==
實(shí)現(xiàn)了比較值而不是實(shí)例。
示例
string str1 = "Hello",
str2 = "Hello",
str3 = "hello";
Console.WriteLine(str1 == str2); // true
Console.WriteLine(str1 == str3 ); // false
Console.WriteLine(str1.Equals(str2));// true
Console.WriteLine(str1.Equals(str3));// false
現(xiàn)在,看看下面的例子:
object obj1 = "Hello";
object obj2 = "Hello";
Console.WriteLine(obj1 == obj2); // true
Console.WriteLine(obj1.Equals(obj2)); // true
在上面的示例中,==
和Equals()
方法看起來(lái)像比較值,但是,他們比較實(shí)例。如果兩個(gè)值相等,C# 將兩個(gè)對(duì)象指向相同的內(nèi)存地址。所以,它們返回了true。
現(xiàn)在,檢查以下內(nèi)容:
object obj1 = new StringBuilder("Hello");
object obj2 = "Hello";
Console.WriteLine(obj1 == obj2); // false
Console.WriteLine(obj1.Equals(obj2));// false
在上面的例子中,obj1指向StringBuilder
類型的對(duì)象,并且obj2是字符串類型,所以即使它們具有相同的值,它們也是不同的實(shí)例。因此,==
和Equals()
方法比較實(shí)例并返回false,因?yàn)樗鼈兪遣煌膶?shí)例。
C# 中 == 和 .Equals 方法的區(qū)別
相等運(yùn)算符(==
)是比較運(yùn)算符,C#中的Equals()
方法用于比較字符串的內(nèi)容。
Equals()
方法只比較內(nèi)容。
例子
using System;
namespace ComparisionExample {
class Program {
static void Main(string[] args) {
string str = "hello";
string str2 = str;
Console.WriteLine("Using Equality operator: {0}", str == str2);
Console.WriteLine("Using equals() method: {0}", str.Equals(str2));
Console.ReadKey();
}
}
}
輸出
Using Equality operator: True
Using equals() method: True
Equality 運(yùn)算符用于比較引用身份。
讓我們看另一個(gè)例子。
例子
using System;
namespace Demo {
class Program {
static void Main(string[] args) {
object str = "hello";
char[] values = {'h','e','l','l','o'};
object str2 = new string(values);
Console.WriteLine("Using Equality operator: {0}", str == str2);
Console.WriteLine("Using equals() method: {0}", str.Equals(str2));
Console.ReadKey();
}
}
}
輸出
Using Equality operator: False
Using equals() method: True
C# 中的 Equals(String, String) 方法
C# 中的 Equals()
方法用于檢查兩個(gè) String
對(duì)象是否具有相同的值。
句法
bool string.Equals(string s1, string s2)
上面,s1 和 s2 是要比較的字符串。
例子
using System;
public class Demo {
public static void Main(string[] args) {
string s1 = "Kevin";
string s2 = "Tom";
string s3 = s2;
Console.WriteLine("String1 = "+s1);
Console.WriteLine("String2 = "+s2);
Console.WriteLine("Are both the strings equal? = "+s1.Equals(s2));
Console.WriteLine("Are both the strings equal? = "+s2.Equals(s3));
}
}
輸出
String1 = Kevin
String2 = Tom
Are both the strings equal? = False
Are both the strings equal? = True
例子
using System;
public class Demo {
public static void Main(string[] args) {
string s1 = "David";
string s2 = "David";
string s3 = s2;
string s4 = "Tom";
string s5 = s4;
Console.WriteLine("String1 = "+s1);
Console.WriteLine("String2 = "+s2);
Console.WriteLine("String3 = "+s3);
Console.WriteLine("String4 = "+s4);
Console.WriteLine("String5 = "+s5);
Console.WriteLine("Is s1 and s2 equal? = "+s1.Equals(s2));
Console.WriteLine("Is s2 and s3 equal? = "+s2.Equals(s3));
Console.WriteLine("Is s3 and s4 equal? = "+s3.Equals(s4));
Console.WriteLine("Is s4 and s5 equal? = "+s4.Equals(s5));
}
}
輸出
String1 = David
String2 = David
String3 = David
String4 = Tom
String5 = Tom
Is s1 and s2 equal? = True
Is s2 and s3 equal? = True
Is s3 and s4 equal? = False
Is s4 and s5 equal? = True
總結(jié)
本文通過(guò)多個(gè)示例,解釋了C#中==
和Equals()
方法的區(qū)別,希望對(duì)你有所幫助。
相關(guān)文章