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?
Bài liên quan
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.
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.
Thực ra nên xem nó tựa tựa như string literal hơn.
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à:
khi em in ra thì nó vẫn là “hello”
còn
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.
Bạn tham khảo bài viết: http://tapchilaptrinh.vn/2012/08/23/java-su-khac-nhau-giua-string-va-stringbufferstringbuilder/
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.