Sự khác biệt giữa String, StringBuffer và StringBuilder



Sự khác biệt giữa String, StringBuffer và StringBuilder
Xin chào, mình trở lại rồi đây!
Trong bài viết này, mình sẽ tiến hành nói tổng quan về kiểu dữ liệu string, rồi phân biệt các lớp string với nhau. Một số nội dung mình không đi sâu vì không đủ kiến thức để khai thác, các bạn thông cảm.
I.    Tổng quan về string
Khi mình viết thường chữ “string”, là hàm ý chỉ về kiểu dữ liệu chuỗi trong tất cả các ngôn ngữ nói chung, trong cách định nghĩa dữ liệu máy tính thông thường.
Định nghĩa đơn giản, một string là một chuỗi các ký tự (ký tự bao gồm cả chữ, số, khoảng trắng, ký tự đặc biệt như !, *, ..). Nó cũng chính là văn bản chữ viết mà chúng ta hay đọc hằng ngày. Chính vì sự phong phú và nổi bật trong việc truyền đạt ý nghĩa của string mà người ta chọn nó là một kiểu dữ liệu quan trọng không kém gì kiểu số.
Cũng bởi việc string chấp nhận cả con số nên “1234” và 1234 cũng khác nhau là điều dễ hiểu vì nó thuộc 2 kiểu dữ liệu khác nhau.
II. Phân biệt các lớp string trong Java
1. Sơ lược về đặc điểm
a. String
String được xem như đại diện của kiểu dữ liệu string mà Java sử dụng. Nó mang tính đối tượng, nhưng một phần người dùng xem nó như kiểu nguyên thủy.
Đặc điểm tạo nên điểm nhấn của String là tính bất biến, tức là không thay đổi giá trị trong ô nhớ. Để hiểu rõ hơn mời bạn đọc bài viết: Cùng tìm hiểu String trong Java
b. StringBuffer và StringBuilder
Hai lớp này gộp trong một mục vì nó giống nhau về tính năng, chỉ khác nhau về một số lưu ý sử dụng.
StringBuffer và StringBuilder được xây dựng giống String thông thường, chỉ khác ở chỗ StringBnB (mình viết tắt cho StringBuffer và StringBuilder) có tính khả biến, tức giá trị trên ô nhớ có thể thay đổi được. Vì khả năng thay đổi linh hoạt của mình nên hai lớp này được hỗ trợ thêm một vài hàm mới và quan trọng như append(), insert(), delete(), tương ứng với chèn cuối, chèn, xóa. 
2. So sánh
a. String vs StringBuffer
Chính bởi sự bất biến trong String, việc tạo ra các string mới và loại các string cũ nhờ bộ garbage collection các lỗ trống trong vùng nhớ. Khi một string mới chèn vào các ô trống sẽ làm mất đi trật tự, làm khó khăn trong việc quản lý các ô nhớ. Chính vì thế, StringBuffer với khả năng khả biến đã khắc phục vấn đề này.


Về tốc độ xử lý, StringBuffer hơn hẳn String trong các thao tác ghép nối, vì trong quá trình ghép nối, String phải chuyển đổi sang StringBuffer để thực hiện ghép nối rồi chuyển đổi lại về kiểu String, nên tốn nhiều thời gian hơn hẳn.
b. StringBuffer vs StringBuilder
Chỉ tóm gọn hai điểm khác nhau sau:
-     Các chương trình đa luồng nên sử dụng StringBuffer, còn các chương trình 1 luồng thì sử dụng StringBuilder. Vì StringBuffer được thiết kế lại để đồng bộ hóa với việc chạy đa luồng, nhưng StringBuilder thì không.
-     Tốc độ xử lý của StringBuilder nhanh hơn StringBuffer
Theo tốc độ xử lý (String < StringBuffer < StringBuilder)
III.       Lời kết
Như thế là mình đã nói sơ lược về string, phân loại String, StringBuffer và StringBuilder. Bài này không thể giải thích kỹ cho các bạn được, tuy nhiên mình cũng đã ráng nghiên cứu và nói một số ý chính cần phải biết cho các bạn xem. Mong các bạn sẽ thích.
Nội dung bài viết thuộc về Lê Công Diễn.

Người viết: Lê Công Diễn
Mang đi nhớ ghi nguồn







Nhận xét

Bài đăng phổ biến từ blog này

Deploy project Springboot MIỄN PHÍ sử dụng Render

Ứng dụng Mã hóa bất đối xứng (Asymmetric cryptography) vào Chữ ký số (Digital Signature)

API và HTTP - Một số khái niệm cơ bản cần biết về Web (Phần 2)