Khác nhau giữa == và Equals() 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