Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

String Interning ใน Java

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