Điều bạn mô tả là hành vi đúng.
Định nghĩa của ==
trong Object
so sánh tham chiếu đối số của nó. Điều này khác với việc triển khai ==
cho String
so sánh các giá trị của các chuỗi. Các toán tử trong C# không phải là ảo. Điều này có nghĩa là mặc dù các đối tượng của bạn thực sự là chuỗi, vì loại tĩnh là object
số ==
từ Object
được gọi, nghĩa là so sánh tham chiếu sẽ được thực hiện.
Trong chuỗi C# có thể là interned trong hồ bơi thực tập. Thông thường, khi bạn tạo các chuỗi mới khi chạy, bạn sẽ nhận được một tham chiếu đến một đối tượng chuỗi hoàn toàn mới. Để nhận chuỗi nội bộ, bạn có thể gọi phương thức string.Intern. Tuy nhiên khi bạn biên dịch mã C#, các chuỗi ký tự được tự động thực hiện cho bạn vì vậy nếu bạn có cùng chuỗi ký tự ở hai vị trí trong mã của bạn, bạn sẽ nhận được một tham chiếu đến cùng một đối tượng chuỗi.
Trong cửa sổ ngay lập tức, các chuỗi dường như không được tập trung - các chuỗi mới được tạo mỗi lần ngay cả khi chúng có cùng giá trị. Nhưng không có yêu cầu trong .NET rằng tất cả các chuỗi phải được thực tập, vì vậy tôi không coi đây là lỗi.
Mã của bạn nên tránh dựa vào việc chuỗi có được thực tập vì đây là chi tiết triển khai hay không.
Nguồn
2010-05-25 13:33:49
+1 chỉ vì tôi chưa bao giờ thấy cửa sổ ngay lập tức và có vẻ gọn gàng! – RichK