StringBuffer và StringBuilder đều là các lớp mutable (có thể thay đổi) dùng để thao tác trên đối tượng chuỗi như đảo ngược chuỗi, nối chuỗi, v.v. Chúng ta có thể sửa đổi chuỗi mà không tạo đối tượng mới. StringBuffer là thread-safe trong khi StringBuilder không thread-safe. Do đó, StringBuilder nhanh hơn StringBuffer. Cũng vậy, toán tử concat + nội bộ sử dụng StringBuffer hoặc StringBuilder. Dưới đây là các khác biệt.
| STT | Tiêu chí | String Buffer | String Builder |
|---|---|---|---|
| 1 | Cơ bản | StringBuffer được giới thiệu từ bản phát hành Java ban đầu. | Được giới thiệu trong Java 5. |
| 2 | Đồng bộ hóa | Được synchronized (thread-safe). | Không synchronized (non-thread-safe). |
| 3 | Hiệu năng | Thread-safe nên nhiều thread không truy cập cùng lúc, do đó chậm hơn. | Không thread-safe nên nhanh hơn StringBuffer. |
| 4 | Mutable | Mutable. Có thể sửa chuỗi không tạo object mới. | Cũng mutable. |
| 5 | Lưu trữ | Heap | Heap |
Ví dụ StringBuilder
public class StringBuilderExample {
public static void main(String[] args) {
StringBuilder builder = new StringBuilder("Hi");
builder.append("Java 8");
System.out.println("StringBuilderExample " + builder);
}
}
Ví dụ StringBuffer
public class StringBufferExample {
public static void main(String[] args) {
StringBuffer buffer = new StringBuffer("Hi");
buffer.append("Java 8");
System.out.println("StringBufferExample " + buffer);
}
}