Sự khác nhau giữa String, StringBuffer, StringBuilder?
Sự khác nhau giữa StringBuffer và StringBuilder
1. String
String là 1 kiểu dữ liệu đặc biệt, nó vừa là kiểu dữ liệu nguyên thủy vừa là lớp wrapper.
-
String thể hiển các ký tự, có 2 cách để tạo 1 string:
Cách 1: String str = "abc"
Với cách tạo này thì String được hiểu như 1 biến nguyên thủy, dữ liệu liệu sẽ được lưu ở string pool.
Nếu được dùng đến thì nó sẽ tìm trong string pool và trả về 1 reference, nếu không tìm thấy thì nó sẽ tạo 1 string mới -> tiết kiệm được bộ nhớ khi sử dụng cùng 1 string trong nhiều thread khác nhau.
Cách 2: String str = new ("abc");
Với cách tạo này thì String được hiểu như 1 wrapper class, nó sẽ được tạo 1 đối tượng tương ứng lưu trong bộ nhớ heap.
-
String là immutable
String chỉ được gán giá trị lúc khởi tạo và không bị thay đổi do đó nó rất an toàn khi sử dụng làm các tham số cho các method hay sử dụng trong môi trường nhiều thread.
Khi sử dụng các method concat(), trim(), hay gán (vd: str += “abc”) chúng đều tạo ra 1 string khác.
2. StringBuffer, StringBuilder
Ngược lại với String, StringBuffer và StringBuilder là các class mutable
Khi thực hiện các method append(), insert()… nó đều thực hiện thay đổi dữ liệu trên chính vùng nhớ đã cấp trước đó chứ không tạo ra 1 vùng nhớ khác như String.
3. So sánh String với StringBuffer, StringBuilder
String | StringBuffer | StringBuilder |
immutable | mutable | mutable |
thread safe | thread safe | không thread safe |
tốc độ chậm | tốc độ nhanh | tốc độ nhanh nhất |