Nó không - trình biên dịch C # không :)
Vì vậy, mã này:
string x = "hello";
string y = "there";
string z = "chaps";
string all = x + y + z;
thực sự được biên dịch thành:
string x = "hello";
string y = "there";
string z = "chaps";
string all = string.Concat(x, y, z);
(Gah - chỉnh sửa can thiệp đã vô tình loại bỏ các bit khác.)
Lợi ích của trình biên dịch C # nhận thấy rằng có nhiều chuỗi nối ở đây là bạn không phải tạo một chuỗi trung gian x + y
mà sau đó cần được sao chép lại như một phần của quá trình nối của (x + y)
và z
. Thay vào đó, chúng tôi hoàn thành tất cả trong một lần.
CHỈNH SỬA: Lưu ý rằng trình biên dịch không thể làm bất cứ điều gì nếu bạn nối trong một vòng lặp. Ví dụ, mã này:
string x = "";
foreach (string y in strings)
{
x += y;
}
chỉ kết thúc tương đương với:
string x = "";
foreach (string y in strings)
{
x = string.Concat(x, y);
}
... vì vậy đây không tạo ra rất nhiều rác, và đó là lý do tại sao bạn nên sử dụng một StringBuilder
trường hợp như vậy. Tôi có một bài viết đi vào chi tiết hơn về cả hai , hy vọng sẽ trả lời các câu hỏi khác.