Chúng ta lập trình java, String là một kiểu dữ liệu primitive, và hầu như rất nhiều coder sử dụng String như một kiểu "chuỗi" duy nhất mà không hề biết đến StringBuilder hay StringBuffer. Chúng khác nhau như thế nào?
String là kiểu dữ liệu immutable. Điều này có nghĩa: Nội dung của nó không thể thay đổi. Ví dụ: String a = "Nguyen Minh", Sau đó: a = a + " Dien". Khi tôi in ra thì sẽ là "Nguyen Minh Dien". Có xử lý gì bên trong? Thực ra, java đã tạo ra một đối tượng String mới và lưu Chuỗi "Nguyen Minh DIen" vào. Nếu trong chương trình của chúng ta thường xuyên dúng đến String cho việc ghép chuỗi, thì đây là một trong những vấn đề về performance (Bộ nhớ).
StringBuffer: Đây là kiều mutable. Chúng ta chỉ cần tạo ra đối tượng kiểu StringBuffer. sau đó sẽ nối nội dung tiếp theo vào đối tượng hiện tại mà không có sự tạo mới đối tượng. Những methods của kiểu này là Synchonized, nó sẽ được dùng hiệu quả trong threads. Nhưng nó sẽ chậm nếu chúng ta sử dụng trong chương trình với 1 thread.
StringBuilder: Tương tự như StringBuffer, nhưng nó không là thread safe, tức các methods không có synchonized. Nó sẽ nhanh nhất trong 3 kiểu dữ liệu
Đó là một trong những cách đơn giản để chương trình chúng ta effective hơn.
String là kiểu dữ liệu immutable. Điều này có nghĩa: Nội dung của nó không thể thay đổi. Ví dụ: String a = "Nguyen Minh", Sau đó: a = a + " Dien". Khi tôi in ra thì sẽ là "Nguyen Minh Dien". Có xử lý gì bên trong? Thực ra, java đã tạo ra một đối tượng String mới và lưu Chuỗi "Nguyen Minh DIen" vào. Nếu trong chương trình của chúng ta thường xuyên dúng đến String cho việc ghép chuỗi, thì đây là một trong những vấn đề về performance (Bộ nhớ).
StringBuffer: Đây là kiều mutable. Chúng ta chỉ cần tạo ra đối tượng kiểu StringBuffer. sau đó sẽ nối nội dung tiếp theo vào đối tượng hiện tại mà không có sự tạo mới đối tượng. Những methods của kiểu này là Synchonized, nó sẽ được dùng hiệu quả trong threads. Nhưng nó sẽ chậm nếu chúng ta sử dụng trong chương trình với 1 thread.
HTML:
StringBuffer bufer = "Nguyen Minh";
bufer.append("Dien") -> nguyen minh dien
HTML:
StringBuilder builder = "Nguyen Minh";
builder.append("Dien") -> nguyen minh dien