Hãy xem xét đoạn mã sau đây.Tại sao so sánh hai chuỗi là đối tượng gây ra kết quả không mong muốn
object str = new string(new char[] { 't', 'e', 's', 't' });
object str1 = new string(new char[] { 't', 'e', 's', 't' });
Console.WriteLine(str==str1); // false
Console.WriteLine(str.Equals(str1)); // true
Tôi hiểu các nhà điều hành bình đẳng làm việc ở đây rằng khi chúng ta đã mặc nhiên đúc để phản đối, các nhà điều hành bình đẳng đang kiểm tra các tài liệu tham khảo của cả hai nếu họ đều bình đẳng và trả về false.
Nhưng tôi đang bối rối trên trang thứ hai, trả về vẻ thật giống như đang gọi Equals ghi đè thực hiện được cung cấp bởi loại chuỗi và nó kiểm tra nội dung của chuỗi nếu chúng bằng nhau.
Câu hỏi của tôi là lý do tại sao nó không kiểm tra sự bình đẳng nội dung cho nhà điều hành là tốt, loại thực tế của họ là chuỗi không phải là đối tượng. đúng ?
trong khi mã follwing kết quả đầu ra ture cho cả hai:
object str = "test";
object str1 = "test";
Console.WriteLine(str==str1); // true
Console.WriteLine(str.Equals(str1)); // true
Cuộc gọi đến các hàm hoặc biến luôn gần nhất với lớp thực tế của đối tượng. Các cuộc gọi đến 'Equals' do đó gọi' string.Equals' được định nghĩa để so sánh nội dung của chuỗi, thay vì 'object.Equals' mặc định. Nếu bạn hoàn toàn muốn sử dụng 'Equals' của' object', bạn có thể sử dụng '(str as object) ?. Equals (str1 as object)'. – Didii
@ khlr Bạn nên thêm rằng như là một câu trả lời, những người hiện đang có loại thiếu điểm ** tại sao ** nó đang xảy ra –
Nhưng nó sai - chuỗi KHÔNG PHẢI là GIÁ TRỊ. –