Sự khác nhau giữa String, StringBuffer, StringBuilder?

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 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

 

 

 

stackjava.com