String interning คือกระบวนการเก็บเพียงหนึ่งสำเนาของแต่ละค่า string ที่แตกต่างกัน (distinct) นอกจากนี้ string ไม่สามารถเปลี่ยนแปลงได้ (immutable) ทำให้ string ที่มีข้อมูลเหมือนกันสามารถ share หน่วยความจำเดียวกันได้ ลดการใช้หน่วยความจำมาก
เมื่อเรียกเมธอด intern():
- ตรวจสอบความเท่ากันระหว่างสอง string - ว่าอ็อบเจ็กต์ string อยู่ใน String Constant Pool (SCP) หรือไม่
- หากอยู่ใน pool คืนค่า string จาก pool หากไม่มี สร้าง String object ใหม่เพิ่มเข้า pool และคืน reference ไปยัง object นั้น
- สำหรับ string 'a' และ 'b'
a.intern() == b.intern()เป็น true ก็ต่อเมื่อa.equals(b)คืน true
ตัวอย่าง
public class Demo {
public static void main(String[] args) {
String s1 = new String("Its");
String s2 = s1.concat("sample");
String s3 = s2.intern();
System.out.println("Checking equality of object 2 and 3 :");
System.out.println(s2 == s3);
String s4 = "Its a sample";
System.out.println("Checking equality of object 3 and 4 :");
System.out.println(s3 == s4);
}
}
ผลลัพธ์
Checking equality of object 2 and 3 : true Checking equality of object 3 and 4 : false
คลาส Demo มี main สร้าง String 3 ตัว s2 เป็น concat ของ s1 s3 เรียก intern() บน s2 เปรียบเทียบ s2==s3 (true เพราะ intern คืน reference เดียวกัน) s4 เป็น string literal "Its a sample" เปรียบเทียบ s3==s4 เป็น false เพราะ s3 มาจาก heap (new String) s4 จาก constant pool