Phương thức String.Copy() trong C# được dùng để tạo một instance mới của String có cùng giá trị với một String được chỉ định. Khác với gán tham chiếu, Copy() tạo ra một đối tượng chuỗi hoàn toàn mới trong bộ nhớ.
Cú pháp
public static string Copy(string str);
Tham số str là chuỗi cần sao chép.
Ví dụ 1: Sao chép và so sánh
using System;
public class Demo
{
public static void Main(string[] args)
{
string s1 = "Amy";
string s2 = "Katie";
string s3 = String.Copy(s2);
Console.WriteLine("Chuỗi 1 = " + s1);
Console.WriteLine("Chuỗi 2 = " + s2);
Console.WriteLine("Hai chuỗi có bằng nhau? = " + s1.Equals(s2));
Console.WriteLine("s2 và s3 (copy) có bằng nhau? = " + s2.Equals(s3));
// So sánh thứ tự (ordinal)
Console.WriteLine(string.CompareOrdinal(s1, s2)); // -10 (s1 < s2)
Console.WriteLine(string.CompareOrdinal(s2, s3)); // 0 (bằng nhau)
}
}
Kết quả
Chuỗi 1 = Amy Chuỗi 2 = Katie Hai chuỗi có bằng nhau? = False s2 và s3 (copy) có bằng nhau? = True -10 0
Ví dụ 2: Minh họa bản sao độc lập
using System;
public class Demo
{
public static void Main(string[] args)
{
string s1 = "Gary";
string s2 = "Gary";
string s3 = String.Copy(s2);
Console.WriteLine("Chuỗi 1 = " + s1);
Console.WriteLine("Chuỗi 2 = " + s2);
Console.WriteLine("s1 và s2 bằng nhau? = " + s1.Equals(s2));
Console.WriteLine("s2 và s3 bằng nhau? = " + s2.Equals(s3));
// Thay đổi s3 - không ảnh hưởng s2
s3 = "Harry";
Console.WriteLine("Sau khi gán s3 = 'Harry':");
Console.WriteLine("s2 và s3 bằng nhau? = " + s2.Equals(s3));
}
}
Kết quả
Chuỗi 1 = Gary Chuỗi 2 = Gary s1 và s2 bằng nhau? = True s2 và s3 bằng nhau? = True Sau khi gán s3 = 'Harry': s2 và s3 bằng nhau? = False
Sự khác biệt: Copy() vs Gán (=) vs Clone()
| Cách làm | Tạo đối tượng mới? | Ghi chú |
|---|---|---|
String.Copy(s) |
Có | Tạo instance String mới với cùng giá trị |
s2 = s1 |
Không | Chỉ gán tham chiếu, trỏ cùng đối tượng |
(string)s1.Clone() |
Có | Trả về object, cần ép kiểu. Ít dùng hơn Copy() |
Lưu ý
- Vì String là bất biến (immutable), việc "sao chép" hiếm khi cần thiết cho mục đích sửa đổi.
- Copy() hữu ích khi cần đảm bảo instance riêng biệt cho API yêu cầu đối tượng khác (ví dụ: interop, serialization).
- Ném
ArgumentNullExceptionnếustrlà null.