Chuỗi được coi là loại tham chiếu nhưng có thể hoạt động như giá trị. Khi nông sao chép một cái gì đó bằng tay hoặc với MemberwiseClone(), các chuỗi được xử lý như thế nào? Họ có được phân biệt riêng biệt và tách biệt khỏi bản sao và chủ không?Làm thế nào để chuỗi hoạt động khi nông sao chép một cái gì đó trong C#?
Trả lời
Chuỗi LÀ loại tham chiếu. Tuy nhiên chúng không thay đổi được (chúng không thể thay đổi được), vì vậy nó sẽ không thực sự quan trọng nếu chúng được sao chép theo giá trị, hoặc được sao chép bằng tham chiếu.
Nếu chúng được sao chép nông thì tham chiếu sẽ được sao chép ... nhưng bạn không thể thay đổi chúng để bạn không thể ảnh hưởng đến hai đối tượng cùng một lúc.
Bạn chỉ đang sao chép tài liệu tham khảo (nghĩ "con trỏ"); hai tham chiếu là riêng biệt (nhưng có cùng giá trị), nhưng chỉ có một đối tượng chuỗi đơn.
Hãy xem xét điều này:
public class Person
{
string name;
// Other stuff
}
Nếu bạn gọi MemberwiseClone, bạn sẽ kết thúc với hai trường hợp riêng biệt của Người, nhưng name
biến của họ, trong khi riêng biệt, sẽ có giá trị như nhau - họ sẽ tham khảo cùng một thể hiện chuỗi. Điều này là bởi vì nó là một bản sao nông.
Nếu bạn thay đổi tên trong một trong các trường hợp đó, điều này sẽ không ảnh hưởng đến nhau, vì hai biến tự tách biệt - bạn chỉ thay đổi giá trị của một trong số chúng để tham chiếu đến một chuỗi khác.
- 1. Làm thế nào để bạn sao chép một cái gì đó như hàm() {...} .property() trong javascript như trong Ember.js?
- 2. (android) Làm thế nào để làm một cái gì đó trên ứng dụng "khởi động"?
- 3. Làm thế nào để đối sánh "một cái gì đó hoặc không có gì" trong một regex bash?
- 4. Sao chép một chuỗi trong C
- 5. Làm một cái gì đó cả một định danh C và một chuỗi?
- 6. Làm thế nào để sao chép chuỗi vào clipboard trong C?
- 7. Làm thế nào để vẽ một cái gì đó trên thành phần WebBrowser trong Delphi
- 8. Sao chép một phần của chuỗi trong C
- 9. Làm thế nào để sao chép bản ghi (Hoạt động) giữa các bảng, một phần?
- 10. Làm thế nào để dán một cái gì đó giữa các thẻ html trong Vim?
- 11. Làm thế nào để tôi đăng nhập một cái gì đó trong thiên thạch?
- 12. Làm thế nào tôi có thể làm một cái gì đó như "cho char trong chuỗi" trong kịch bản Vim?
- 13. C# Từ điển bản sao nông nghiệp?
- 14. Làm thế nào để làm cho cron chạy một cái gì đó mỗi phút "N", trong đó n% 5 == 1?
- 15. Rails: làm thế nào để tôi xác nhận rằng một cái gì đó là một boolean?
- 16. Làm thế nào để ghi lại một cái gì đó khác với Linear PCM trên iPhone
- 17. làm thế nào để sử dụng gettimeofday() hoặc một cái gì đó tương đương với Visual Studio C++ 2008?
- 18. Làm thế nào để xây dựng một cái gì đó khi tôi biết tôi sẽ làm cho nó sai?
- 19. giải nén chuỗi bắt đầu với và kết thúc với một cái gì đó trong C#
- 20. Tôi làm cách nào để tạm dừng một BackgroundWorker? Hoặc một cái gì đó tương tự
- 21. Làm thế nào để std :: constructor sao chép của vector hoạt động?
- 22. Làm thế nào để sao chép ImageData?
- 23. Làm thế nào để thêm một cái gì đó như "? X = 123" vào NSURL?
- 24. Làm thế nào để getchar() hoạt động?
- 25. Có cái gì đó như "nếu không tồn tại tạo chuỗi ..." trong Oracle SQL?
- 26. Làm thế nào để làm điều gì đó nhiều lần trong khi nhấn một nút?
- 27. Python: Một cái gì đó giống như `bản đồ` hoạt động trên các chủ đề
- 28. Làm thế nào để sao chép một biến ruby?
- 29. ArrayList bản sao nông lặp hoặc sao chép()
- 30. Làm thế nào để sao chép mảng?
Vì vậy, khi tôi thay đổi chuỗi trong đối tượng sao chép, một chuỗi mới được tạo với một tham chiếu mới? Vì vậy, khi tôi thực hiện một cái gì đó như oldString = oldString + "A", tôi đang tạo một đối tượng mới với một tham chiếu mới? – danmine
... điều này cũng giải thích tại sao String.Replace phải trả về một chuỗi mới, thay vì thay đổi chuỗi. – stusmith
Nếu bạn cần một chuỗi có thể thay đổi, hãy cân nhắc sử dụng StringBuilder. – stusmith