Tổng quát hơn "vòng trong" - bất kỳ lúc nào bạn muốn ghép nối trên nhiều câu lệnh và không cần kết quả trung gian dưới dạng chuỗi. Ví dụ:
StringBuilder builder = new StringBuilder("Start");
if (someCondition) {
builder.append("Foo");
}
if (someOtherCondition) {
builder.append("Bar");
}
builder.append("End");
String result = builder.toString();
Trong khi bạn có thể viết rằng:
String result = "Start" + (someCondition ? "Foo" : "")
+ (someOtherCondition ? "Bar" : "") + "End";
... mà trở nên khó đọc. Và nếu có nhiều phát biểu hơn trong các cơ quan if
, nó thậm chí có thể không khả thi.
Để khắc phục điều gì đó trong câu hỏi của bạn mặc dù:
Theo tôi được biết, khi tôi làm Chuỗi baz = "foo" + "thanh" + "123" trình biên dịch java nội thay thế biểu thức với một StringBuilder .
Không, khi bạn viết rằng biểu hiện trình biên dịch nhận ra rằng đó là một thời gian biên dịch không đổi, và thay thế nó bằng
String baz = "foobar123";
Đó là một lý do rất tốt không để sử dụng một cách rõ ràng StringBuilder
- các mã trên rõ ràng là hiệu quả hơn trong thời gian thực hiện hơn
String baz = new StringBuilder("foo").append("bar").append("123").toString();
Khi nó không phải là hằng số biên dịch, trình biên dịch Java sẽ thực hiện phép nối bằng cách sử dụng một số StringBuilder
, thường để lại cho bạn mã dễ hiểu hơn với việc sử dụng rõ ràng StringBuilder
, nhưng không có hiệu suất. Tôi nghi ngờ giáo viên của bạn hoặc không hiểu chính xác chuỗi nối, hoặc chỉ cần đọc ở một nơi khác mà bạn nên sử dụng StringBuilder
mà không hiểu đầy đủ khi thích hợp.
Nguồn
2014-07-04 09:55:23
'để luôn sử dụng StringBuilder một cách rõ ràng' - đó không phải là phương pháp hay. Bạn sẽ hy sinh khả năng đọc mã để đạt được hiệu suất 0,0000000000001%. Sử dụng StringBuilder khi bạn định nối thêm hàng nghìn chuỗi. –
Tôi không chắc chắn lý do tại sao bạn giáo viên java rất quan tâm đến việc sử dụng StringBuilder. StringBuilder là tuyệt vời và tất cả nhưng giao dịch java với nó trong nội bộ. – nafas
Giáo viên của bạn sai. Bạn nói đúng. –