43.Immutable String trong lập trình java

Trong lập trình Java, các đối tượng String được gọi là “immutable”, có nghĩa là sau khi một đối tượng String được tạo ra, giá trị của nó không thể thay đổi. Điều này có nghĩa là một khi một đối tượng String đã được khởi tạo với một giá trị, bạn không thể thay đổi nội dung của nó.

Khi thực hiện các thao tác trên chuỗi như nối chuỗi, cắt chuỗi, thay thế, Java sẽ không thay đổi đối tượng String gốc, thay vào đó, nó tạo ra một đối tượng String mới chứa kết quả của các thao tác này. Do đó, đối tượng String ban đầu vẫn không thay đổi và được coi là bất biến (immutable).

Sự bất biến của String mang lại một số lợi ích, bao gồm:

  1. An toàn luồng (Thread-safe): Đối tượng String không thể thay đổi, do đó, nếu nhiều luồng cùng truy cập vào một đối tượng String, bạn không cần phải lo lắng về các vấn đề liên quan đến đồng bộ hóa (synchronization).
  2. Tối ưu hiệu suất: Khi các thao tác trên chuỗi được thực hiện và tạo ra các đối tượng String mới, việc sử dụng bộ nhớ sẽ được tối ưu hơn so với việc sửa đổi chuỗi ban đầu. Điều này giúp tránh tình trạng “garbage collection” thường xảy ra khi thay đổi chuỗi.
  3. An toàn từ môi trường: Do String là bất biến, nó được coi là an toàn khi được truyền vào các môi trường không tin cậy, chẳng hạn như các phương thức công cộng hoặc các đối số của phương thức.

Để thực hiện các thay đổi hoặc thao tác mới trên một chuỗi, bạn nên sử dụng lớp StringBuilder hoặc StringBuffer. Cả hai lớp này cung cấp các phương thức thay đổi chuỗi mà không tạo ra các đối tượng String mới, giúp cải thiện hiệu suất khi thực hiện các thao tác nhiều lần.

Dưới đây là một ví dụ minh họa về tính bất biến của String:

java
public class ImmutableStringExample {
    public static void main(String[] args) {
        String str1 = "Hello";
        String str2 = str1.concat(" World"); // Tạo ra một đối tượng String mới

        System.out.println("str1: " + str1); // str1 không thay đổi
        System.out.println("str2: " + str2); // str2 chứa giá trị mới
    }
}

Output sẽ là:

makefile
str1: Hello
str2: Hello World

Như bạn có thể thấy, đối tượng str1 vẫn giữ nguyên giá trị ban đầu “Hello” và không bị thay đổi sau khi gọi phương thức concat(). Thay vào đó, phương thức concat() tạo ra một đối tượng String mới str2 với giá trị “Hello World”.

Leave a Comment

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

Scroll to Top