Tìm hiểu về String, StringBuilder và StringBuffer

I, String

  • String là 1 final class đại diện cho 1 array các character.
  • Do đó String là immutable object có nghĩa là khi 1 String được khởi tạo, nó không thể thay đổi được nữa.
  • Chúng ta có thể khởi tạo 1 String theo 2 cách:
1
2
3
String str = "ABC";
// or
String str = new String("ABC");
  • Ở cách đầu tiên, JVM sẽ tìm hiếm 1 String trong String pool. Nếu tìm thấy, JVM sẽ sử dụng String trong String pool. Nếu không tìm thấy, JVM sẽ tạo ra String object trong String pool.
  • Ở cách thứ hai, JVM tạo ra String object ở trong heap memory.
  • String class override 2 method equals()hashCode(). Implement của equals() trong String class return true nếu chúng có cùng mảng character.

II, StringBuilder và StringBuffer

  • Vì String là immutable object do đó các method của String chỉ tạo và trả về 1 String mới.
  • Các method này sinh ra nhiều rác trong heap memory. Do đó chúng ta nên sử dụng StringBuilderStringBuffer để làm việc với String.
StringBuffer StringBuilder
Thread-safe Not thread-safe
Synchronized Not synchronized
Được thêm từ Java 1.0 Được thêm từ Java 1.5
Slower Faster
  • Toán tử + nội tại sử dụng StringBuilder và StringBuffer.
  • Do StringBuffer thực hiện synchronized (thread-safety) do đó nó chậm hơn StringBuilder.
  • StringBuilder và StringBuffer chỉ tạo ra 1 String khi bạn gọi toString().