CyStack logo
  • Sản phẩm & Dịch vụ
  • Giải pháp
  • Bảng giá
  • Công ty
  • Tài liệu
Vi

vi

Trang chủHướng dẫnTại sao String bất biến trong Java? Giải thích chi tiết
Java

Tại sao String bất biến trong Java? Giải thích chi tiết

CyStack blog 3 phút để đọc
CyStack blog11/09/2025
Locker Avatar

Bao Tran

Web Developer

Locker logo social
Reading Time: 3 minutes

Tại sao String bất biến trong Java là một trong những câu hỏi phỏng vấn phổ biến. String là một trong những class được sử dụng nhiều nhất trong bất kỳ ngôn ngữ lập trình nào. Chúng ta biết rằng trong Java, String là bất biến (immutable) và final. Java runtime duy trì một String pool, điều này làm cho String trở thành một class đặc biệt.

Tại sao String bất biến trong Java

Tại sao String bất biến trong Java?

Hãy cùng xem một số lợi ích của việc String là immutable, điều này sẽ giúp ta hiểu rõ hơn tại sao String lại bất biến trong Java.

  1. String pool chỉ khả thi nhờ việc String là immutable trong Java. Bằng cách này, Java Runtime tiết kiệm được rất nhiều heap space, vì nhiều biến String khác nhau có thể cùng tham chiếu đến một String trong pool. Nếu String không phải là bất biến, thì String interning sẽ không thể tồn tại. Bởi vì khi một biến thay đổi giá trị, sự thay đổi đó sẽ ảnh hưởng đến tất cả các biến khác đang tham chiếu đến cùng một String.
  2. Nếu String không phải là bất biến thì nó có thể gây ra mối đe dọa bảo mật nghiêm trọng cho ứng dụng. Ví dụ, trong quá trình kết nối cơ sở dữ liệu, username và password thường được truyền dưới dạng String để lấy kết nối. Trong socket programming, các thông tin như host và port cũng được truyền dưới dạng String. Nhờ việc String là immutable, giá trị của nó không thể bị thay đổi. Nếu không, một hacker có thể chỉnh sửa giá trị mà biến String đang tham chiếu, từ đó gây ra các lỗ hổng bảo mật trong ứng dụng.
  3. Vì String là bất biến nên nó an toàn khi sử dụng trong môi trường multithreading. Một String instance duy nhất có thể được chia sẻ cho nhiều thread khác nhau. Điều này giúp tránh việc phải sử dụng đồng bộ hóa để đảm bảo thread-safety. Nói cách khác, String mặc định là thread-safe.
  4. String được sử dụng trong Java ClassLoader, và tính chất không thay đổi giúp đảm bảo tính bảo mật, rằng đúng class sẽ được ClassLoader tải vào. Ví dụ, hãy tưởng tượng một tình huống khi bạn muốn load class java.sql.Connection, nhưng giá trị tham chiếu lại bị thay đổi thành myhacked.Connection. Class này có thể thực hiện những hành động không mong muốn trên cơ sở dữ liệu của bạn.
  5. Vì String là bất biến nên hashcode của nó được lưu trữ (cached) ngay tại thời điểm khởi tạo và không cần phải tính toán lại nhiều lần. Điều này khiến String trở thành một lựa chọn lý tưởng để làm key trong Map, đồng thời giúp quá trình xử lý nhanh hơn so với các đối tượng khác dùng làm HashMap key. Đây chính là lý do String được sử dụng phổ biến nhất làm key trong HashMap.

Trên đây là một số lý do mà tôi có thể nghĩ ra, cho thấy những lợi ích của việc String là bất biến. Đây là một tính năng tuyệt vời của Java String class, và cũng chính điều này làm cho nó trở nên đặc biệt. Bạn có thể đọc thêm bài viết này để biết cách tự viết một immutable class.

Bạn có thể tham khảo thêm nhiều ví dụ về Java String trong GitHub Repository của chúng tôi.

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất