2009-02-03 41 views

Trả lời

40

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.

+0

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

+1

... đ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

+0

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

6

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.

21

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.

Các vấn đề liên quan