Chào mọi người, sau vài ngày tìm hiểu về java tui có đọc được string trong java là Immutable (bất hoại , vĩnh sinh bất biến …). Tui có test thử code như ở dưới đây, thì quả thật nó bất biến như hằng số thiệt.
package OOP;
public class testOOP{
public static void main(String[] args){
String str = "DayNhauHoc.com";
System.out.println( "Lower case: " + str.toLowerCase() );
System.out.println( "After: " + str );
}
}
Output:

Tui tìm hiểu tiếp trên google thì gặp đoạn này:
Khi bạn khởi tạo một biến String với chuỗi nằm trong dấu ngoặc kép ” ” (ví dụ: String s = “heloo”) tức là bạn đang khởi tạo một đối tượng String Literal và đối tượng String này được cất giữ ở trong một vùng nhớ đặc biệt gọi là String Pool. Mỗi khi bạn khởi tạo một String Literal tiếp theo, JVM sẽ kiểm tra String Pool; nếu chuỗi đã tồn tại trong Pool, một tham chiếu tới String Literal tương ứng được trả về, nếu không JVM sẽ khởi tạo một đối tượng String mới và đặt nó vào trong Pool. String Literal khiến việc quản lí bộ nhớ của JVM được hiệu quả hơn
Tui có test thử thì đúng là vậy thật :
package OOP;
public class testOOP{
public static void main(String[] args) {
String str1 = "DayNhauHoc.com";
String str2 = "DayNhauHoc.com";
String str3 = new String("DayNhauHoc.com");
System.out.println(str1 == str2);
System.out.println(str1 == str3);
}
}
Output:
Tui suy nghĩ mãi trong đầu là, mặc dù là để quản lý tốt bộ nhớ (có thể), nhưng nếu StringPool có nhiều string thì sao (cở hàng triệu hàng tỉ cái string), Không biết việc tìm kiếm xem có sẵn chưa có tốn nhiều thời gian hay không? Nếu không thì không biết cách StringPool nó tổ chức các string sẵn có đó như nào?


83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?