Trong trường hợp đặc biệt này, hai đang thực sự giống hệt nhau. Trình biên dịch sẽ biến đổi biến thể thứ hai, một biến thể sử dụng toán tử +
, thành một cuộc gọi đến Concat, phiên bản đầu tiên.
Vâng, có nghĩa là, nếu hai thực sự chứa các biến chuỗi được nối.
Mã này:
B = "abc" + "def";
thực sự biến thành này, mà không cần nối ở tất cả:
B = "abcdef";
Điều này có thể được thực hiện bởi vì kết quả của việc bổ sung có thể được tính tại thời gian biên dịch, vì vậy trình biên dịch thực hiện điều này.
Tuy nhiên, nếu bạn đã sử dụng một cái gì đó như thế này:
A = String.Concat(stringVariable1, stringVariable2);
B = stringVariable1 + stringVariable2;
Sau đó hai sẽ tạo ra cùng mã.
Tuy nhiên, tôi muốn biết chính xác những gì "nhiều" đó đã nói, vì tôi nghĩ đó là điều gì đó khác biệt.
Những gì tôi nghĩ rằng họ nói là chuỗi nối là xấu, và bạn nên sử dụng StringBuilder hoặc tương tự.
Ví dụ, nếu bạn làm điều này:
String s = "test";
for (int index = 1; index <= 10000; index++)
s = s + "test";
Sau đó, những gì xảy ra ở đây là mỗi lần lặp qua các vòng lặp, bạn sẽ xây dựng một chuỗi mới, và thẫn thờ nhìn người già được hưởng thu gom rác thải.
Ngoài ra, mỗi chuỗi mới như vậy sẽ có tất cả nội dung của tệp cũ được sao chép vào nó, điều đó có nghĩa là bạn sẽ di chuyển một lượng lớn bộ nhớ xung quanh.
Trong khi đoạn mã sau:
StringBuilder sb = new StringBuilder("test");
for (int index = 1; index <= 10000; index++)
sb.Append("test");
thay vào đó sẽ sử dụng một bộ đệm bên trong, đó là lớn hơn so với những gì cần được, chỉ trong trường hợp bạn cần phải thêm nhiều văn bản hơn vào nó. Khi bộ đệm đó đầy, một cái mới lớn hơn sẽ được phân bổ, và cái cũ còn lại để thu gom rác.
Vì vậy, về mặt sử dụng bộ nhớ và mức sử dụng CPU, biến thể sau này tốt hơn nhiều.
Ngoài ra, tôi sẽ cố gắng tránh tập trung quá nhiều vào "là biến thể mã X tốt hơn Y", ngoài những gì bạn đã có trải nghiệm. Ví dụ, tôi sử dụng StringBuilder bây giờ chỉ vì tôi nhận thức được trường hợp, nhưng đó không phải là để nói rằng tất cả các mã tôi viết mà sử dụng nó thực sự cần nó.
Cố gắng tránh dành thời gian vi tối ưu hóa mã của bạn, cho đến khi bạn biết mình bị nút cổ chai. Vào thời điểm đó, mẹo thông thường về biện pháp đầu tiên, được cắt giảm sau đó, vẫn có hiệu lực.
Với các chuỗi có kích thước này, nó sẽ không quan trọng –