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

บทบาทของ String intern() วิธีการใน java คืออะไร?


สตริงคือคลาสใน Java ที่เก็บลำดับของอักขระ มันเป็นของ java.lang บรรจุุภัณฑ์. เมื่อคุณสร้างวัตถุสตริงแล้ว คุณจะไม่สามารถแก้ไขได้ (ไม่เปลี่ยนรูปแบบ)

ที่เก็บข้อมูล

ออบเจ็กต์ String ทั้งหมดถูกเก็บไว้ในตำแหน่งหน่วยความจำแยกต่างหากในพื้นที่ฮีปที่เรียกว่า String Constant Pool .

เมื่อใดก็ตามที่คุณกำหนดค่าสตริง JVM จะสร้างวัตถุสตริงด้วยค่าที่กำหนดในพูลค่าคงที่สตริง ดังนั้น หากคุณรันโปรแกรมข้างต้น ค่าสตริงสองค่าจะถูกสร้างขึ้นในพูลค่าคงที่สตริง

บทบาทของ String intern() วิธีการใน java คืออะไร?

วิธีการฝึกงาน ()

เมธอดนี้คืนค่าของสตริงปัจจุบันจากพูลของค่าสตริงที่ไม่ซ้ำ เมื่อใดก็ตามที่คุณเรียกใช้เมธอดนี้ในสตริงเฉพาะ หากพูลค่าคงที่สตริงมีสตริงเท่ากับอยู่แล้ว (ตามเมธอดเท่ากับของคลาส Object) ค่าคงที่ของสตริงจะถูกส่งกลับ หากไม่เป็นเช่นนั้น สตริงปัจจุบันจะถูกเพิ่มไปยังพูลค่าคงที่ของสตริงโดยส่งคืนการอ้างอิงไปยังมัน

กล่าวคือ หากคุณเรียกใช้เมธอดนี้ในสองสตริงที่มีเนื้อหาเหมือนกัน รับประกันได้ว่าพวกเขาใช้หน่วยความจำร่วมกัน

วิธีนี้สะดวกต่อการลดหน่วยความจำที่ใช้ในกรณีที่มีค่าที่ซ้ำกันหลายค่า

ตัวอย่าง

ต่อไปนี้ เรากำลังสร้างสตริงสองสตริง (โดยใช้คีย์เวิร์ดใหม่) ที่มีเนื้อหาเดียวกันและเปรียบเทียบกับการใช้โอเปอเรเตอร์ “==” แม้ว่าวัตถุทั้งสองมีค่าเท่ากัน เนื่องจากไม่ได้อ้างอิงถึงวัตถุเดียวกัน (หน่วยความจำ) ผลลัพธ์จะเป็นเท็จ

public class InternExample {
   public static void main(String args[]) {
      String str1 = new String("Hello");
      str1 = str1.intern();
      String str2 = "Hello";
      str2 = str2.intern();
      System.out.println(str1.equals(str2));
   }
}

ผลลัพธ์

false

แต่ถ้าคุณเรียกใช้เมธอด intern กับอ็อบเจ็กต์ทั้งสองก่อนที่จะเปรียบเทียบ เนื่องจากจะทำให้แน่ใจว่าอ็อบเจ็กต์ทั้งสองใช้หน่วยความจำร่วมกันหากมีเนื้อหาเหมือนกัน ผลลัพธ์จะเป็นจริง

public class InternExample {
   public static void main(String args[]) {
      String str1 = new String("Hello");
      str1 = str1.intern();
      String str2 = new String("Hello");
      str2 = str2.intern();
      System.out.println(str1==str2);
   }
}

ผลลัพธ์

true