Wednesday, June 22, 2016

Khác nhau giữa == và Equals() C#

Khác nhau giữa == vàEquals() C#
Khác nhau giữa == và Equals() C#
         Xin chào các bạn, mình có gặp rất nhiều người thắc mắc hỏi sự khác nhau giữa  giữa phép so sánh == vàEquals() trong ngôn ngữ lập trình C# cũng như trong các ngôn ngữ lập trình khác.
         Bản thân tôi mới học lập trình cũng thấy khá là nhiều thứ có cùng chức năng nhau nhưng lại được viết khác nhau. Điều đặt ra ở đây là phân biệt nó như nào và trong trường hợp nào thì dùng nó. Lang thang 1 hồi trên stackoverflow mình có lượm được 1 câu hỏi và 1 số câu trả lời mình xin tóm tắt như sau :

I have a condition in a silverlight application that compares 2 strings, for some reason when I use == it returns false while .Equals() returns true.
Dịch : Tôi có một đoạn code trong chương trình silverlight đó là so sánh 2 chuỗi với nhau , với trường hợp sử dụng phép == thì nó trả về false trong khi sử dụng .Equals() thì nó trả về true.
Here is the code:
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content.Equals("Energy Attack"))
{
    // Execute code
}

if (((ListBoxItem)lstBaseMenu.SelectedItem).Content == "Energy Attack")
{
    // Execute code
}
Trả lời :
Khi == nó được sử dụng trong trường hợp nó thuộc kiểu đối tượng (object) , nó sẽ giải quyết vấn đề về chuỗi có thư viện System.Object.ReferenceEquals.

Equals chỉ là môt ảo phương thức , vì vậy ta có thể ghi đè nó và sử dụng (which, trong đó chuỗi  được so sánh với nhau ).
Input:
string s1 = "test";
string s2 = "test";
string s3 = "test1".Substring(0, 4);
object s4 = s3;
Console.WriteLine("{0} {1} {2}", object.ReferenceEquals(s1, s2), s1 == s2, s1.Equals(s2));
Console.WriteLine("{0} {1} {2}", object.ReferenceEquals(s1, s3), s1 == s3, s1.Equals(s3));
Console.WriteLine("{0} {1} {2}", object.ReferenceEquals(s1, s4), s1 == s4, s1.Equals(s4));
Output:
True True True
False True True
False False True
Ví dụ về so sánh kiểu số:
> 2 == 2.0
True

> 2.Equals(2.0)
False
Ví dụ về so sánh chuỗi:
> string x = null;
> x == null
True

> x.Equals(null)
NullReferenceException
Kết luận:  Trong cả hai trường hợp, == xem như là một cách hữu ích hơn Equals

Bài Viết Liên Quan