Mutable vs Immutable, String vs String Buffer vs String Builder
String
- Khái niệm:
String
trong Java đại diện cho chuỗi ký tự và là không thay đổi (immutable). Có hai cách để khởi tạoString
:String str1 = "ABC"; // Tạo từ literal String str2 = new String("ABC"); // Tạo từ đối tượng
- Bản chất immutable:
String
không thay đổi sau khi được tạo. Điều này đảm bảo an toàn khi sử dụng trong môi trường đa luồng và cho phép chia sẻ không bị xáo trộn dữ liệu. - Tiết kiệm bộ nhớ: JVM quản lý một String pool để tối ưu hóa việc sử dụng bộ nhớ bằng cách lưu trữ các chuỗi giống nhau chỉ một lần.
- Phép cộng (+): Toán tử
+
cho phép nối chuỗiString
, nội bộ sử dụngStringBuffer
để thực hiện hành động này. - So sánh và hashcode:
String
có các phương thứcequals()
vàhashCode()
để so sánh giá trị chuỗi.equals()
phân biệt hoa thường, cònequalsIgnoreCase()
không phân biệt. - Mã hóa UTF-16: Dữ liệu ký tự của
String
được lưu trữ và xử lý theo mã hóa UTF-16.
StringBuffer
- Mutable và thread-safe:
StringBuffer
là một lớp có khả năng thay đổi (mutable) và đồng bộ hóa (thread-safe). Các phương thức của nó được đồng bộ hóa để đảm bảo an toàn trong môi trường đa luồng. - Sử dụng và hiệu suất: Dùng
StringBuffer
khi cần thực hiện các thao tác chuỗi trong môi trường đa luồng. Tuy nhiên, vì phải đồng bộ hóa, nên có thể làm giảm hiệu suất so vớiStringBuilder
.
StringBuilder
- Mutable nhưng không đồng bộ:
StringBuilder
tương tựStringBuffer
về tính mutable, nhưng không đồng bộ hóa. Điều này làm choStringBuilder
có hiệu suất cao hơnStringBuffer
trong các môi trường không đa luồng. - Hiệu suất: Với môi trường đơn luồng hoặc không cần bảo đảm đồng bộ, sử dụng
StringBuilder
để tối ưu hiệu suất.
Tóm lại
- Lựa chọn sử dụng:
- Sử dụng
String
khi bạn cần một chuỗi không thay đổi. - Sử dụng
StringBuffer
khi bạn cần đảm bảo đồng bộ và an toàn trong môi trường đa luồng. - Sử dụng
StringBuilder
khi bạn không cần đảm bảo đồng bộ, như trong môi trường đơn luồng.
- Sử dụng
Đây là sự khác biệt chính giữa String
, StringBuffer
, và StringBuilder
trong Java, mỗi loại có ứng dụng và điểm mạnh riêng.
Đăng nhận xét