String pool (string constant pool) là vùng cache trong heap chứa các String literal — các literal giống nhau dùng chung 1 object.
String a = "hello"→ JVM tìm trong pool: có rồi thì trả reference cũ →"hello" == "hello"chotrue(cùng object).new String("hello")→ luôn tạo object mới ngoài pool → so==với literal chofalse, dùequals()vẫntrue.str.intern()→ trả về bản trong pool (đưa vào pool nếu chưa có).
Vì sao tồn tại được: String immutable (xem câu String immutable) — nhiều nơi chia sẻ cùng 1 object mà không sợ bên nào sửa → tiết kiệm bộ nhớ đáng kể vì literal lặp lại rất nhiều.
Bài học rút ra:
1. So sánh String luôn dùng equals(), không dùng == — == chỉ đúng tình cờ nhờ pool.
2. Không viết new String("...") — vừa thừa object vừa vô hiệu hoá pool.