01/10/2018, 08:34

Hỏi tính mutable String

Theo mình đọc tài liệu có ghi:

The String class is immutable, so that once it is created a String object cannot be changed. .

Thì mình hiểu là string một khi đã tạo không thể thay đổi.
vd: String x = “hello” or = new String"hello";
x = “h”;
thì không được. Nhưng mình test đều thầy ok ko lỗi. Có phải do minh hiểu sai?

viết 10:35 ngày 01/10/2018

Thay đổi ở đây là thay đổi ký tự trong chuỗi

bạn hiểu chuỗi immutable là chuỗi biết bằng viết mực, ko thể thay đổi được, muốn đổi thì phải gạch bỏ hết và viết lại chuỗi mới. Còn chuỗi mutable được là chuỗi viết bằng viết chì, sai ký tự nào thì có thể xóa ký tự đó rồi sửa lại.

Mason Ha viết 10:36 ngày 01/10/2018

Cho chuỗi ban đầu String s = "hello";
thì bạn sẽ không thể thay đổi nó được.
ví dụ append - thêm vào sau chuỗi chữ " world" bằng toán tử +: s += " world";

Trình biên dịch sẽ tạo một đối tượng String mới với giá trị “hello world” rồi gán vào s.

rogp10 viết 10:49 ngày 01/10/2018

Thực ra nên xem nó tựa tựa như string literal hơn.

Nguyen Ca viết 10:50 ngày 01/10/2018

x = “h” thì sẽ tạo ra vùng nhớ mới để chứa, còn vùng nhớ chứa “hello” sẽ thành “rác”, và sẽ được garbage collector “dọn dep”
Lấy ví dụ dễ hiểu là:

x.concat("test")

khi em in ra thì nó vẫn là “hello”
còn

x = x.concat("test")

thì nó sẽ là “hello test”
Cho nên khì dùng String để chứa select SQL người ta thường dùng StringBuilder để append từng đoạn vào do nó không tạo rác như dùng String bình thường
Ngoài String thì đối tượng như java.lang.Character, java.lang.Short, java.lang.Boolean, java.lang.Long, java.lang.Double, java.lang.Float cũng là immutable.

Lương Ngọc Phú viết 10:36 ngày 01/10/2018

Bạn tham khảo bài viết: http://tapchilaptrinh.vn/2012/08/23/java-su-khac-nhau-giua-string-va-stringbufferstringbuilder/

Tuấn Tử Tế viết 10:41 ngày 01/10/2018

x=“Hello”; thì nó sẽ tạo ra 1 đối tượng String “Hello” ở Heap. x chỉ là biến trỏ vào đối tượng đó.
x=“h”; thì nó sẽ không thay đổi đối tượng “Hello” mà tạo ra 1 đối tượng mới là “h” rồi trỏ x tới đó.
Đối tượng “Hello” kia vẫn tồn tại và ko bị thay đổi.

Bài liên quan
0