post-image

Sự khác nhau giữa String và StringBuffer

String & Regex

String là kiểu chuỗi mà được sử dụng khá phổ biến trong khi chúng ta lập trình. Nhưng bên cạnh String, chúng ta còn có StringBuffer và StringBuilder. 2 khái niệm này gần gần như nhau. Vì vậy, bài viết này sẽ nói đến sự khác nhau giữa String và String Buffer.

Kiểu Object

Kiểu Object của String là bất biến (immutable) còn của StringBuffer là có thể sửa đổi (mutable).

Có thể các bạn chưa rõ bất biến là như thế nào và có thể sửa đổi là như thế nào.

Chúng ta cùng xét 1 ví dụ nhỏ sau:

String str = “Code”;
 
System.out.println(str.hashCode());
 
str = str + “Gym”;
 
System.out.println(str.hashCode());
 
StringBuffer sb = new StringBuffer(“Code”);
 
System.out.println(sb.hashCode());
 
sb.append(“Gym”);
 
System.out.println(sb.hashCode());

Sau khi thực thi đoạn code vừa rồi, chúng ta nhận được 2 hashCode đầu tiên là khác nhau, còn 2 hashCode cuối cùng là giống nhau.

HashCode là ô trỏ giá tri của biến trong bộ nhớ. Vậy khi chúng ta thực hiện thao tác cộng chuỗi String, ô giá trị cũ sẽ không bị thay đổi mà thay vì đó biến str sẽ trỏ đến ô nhớ mới có giá trị sau khi đã cộng chuỗi. Còn đối với StringBuffer, sau khi thực hiện thao tác cộng chuỗi thì vẫn là ô nhớ đó nhưng giá trị đã bị thay đổi. Đó chính là sự bất biến và có thể sửa đổi.

Hiệu suất

Nếu bài toán của chúng ta cần xử lý rất nhiều lần nối chuỗi thì lúc này StringBuffer thực sự có tác dụng. Khả năng nối chuỗi của StringBuffer sẽ nhanh và tốn ít bộ nhớ hơn vì không phải tạo ra nhiều vùng nhớ mới

Phương thức equals()

Lớp String ghi đề phương thức equals() của lớp Object. Vì thế bạn có thể so sánh nội dung của 2 chuỗi bằng phương thức equals().

Lớp StringBuffer không ghi đề phương thức equals() của lớp Object. Vì thế chúng ta cần phải chuyển đổi từ StringBuffer về String bằng phương thức .toString() sau đó mới sử dụng phương thức equals().

Tóm lại, StringBuffer không hẳn hoàn toàn tốt hơn String nên chúng ta tùy thuộc vào bài toán, hiệu suất hay bộ nhớ để chúng ta có thể chon lựa. Trên thực tế, chúng ta thường kết hợp chúng với nhau để tối ưu nhất.


Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.

Tags:
,

Leave a Reply

Your email address will not be published. Required fields are marked *