ה שיעור Java String מתמחה() השיטה מחזירה את המחרוזת המוטבעת. זה מחזיר את הייצוג הקנוני של מחרוזת.
ניתן להשתמש בו כדי להחזיר מחרוזת מהזיכרון אם היא נוצרה על ידי מילת מפתח חדשה. זה יוצר עותק מדויק של אובייקט המחרוזת הערימה ב-String Constant Pool.
חֲתִימָה
החתימה של שיטת המתמחה() ניתנת להלן:
public String intern()
החזרות
מחרוזת פנימית
הצורך והעבודה של שיטת String.intern()
כאשר מחרוזת נוצרת ב-Java, היא תופסת זיכרון בערימה. כמו כן, אנו יודעים שהמחלקה String אינה ניתנת לשינוי. לכן, בכל פעם שאנו יוצרים מחרוזת באמצעות מילת המפתח החדשה, זיכרון חדש מוקצה בערימה עבור המחרוזת המתאימה, ללא קשר לתוכן המערך. שקול את קטע הקוד הבא.
String str = new String('Welcome to JavaTpoint.'); String str1 = new String('Welcome to JavaTpoint'); System.out.println(str1 == str); // prints false
ההצהרה println מודפסת false מכיוון שמוקצה זיכרון נפרד לכל מחרוזת מילולית. לפיכך, שני אובייקטי מחרוזת חדשים נוצרים בזיכרון, כלומר str ו-str1. שמחזיק בהתייחסויות שונות.
אנו יודעים שיצירת אובייקט היא פעולה יקרה בג'אווה. לכן, כדי לחסוך זמן, מפתחי Java המציאו את הרעיון של String Constant Pool (SCP). ה-SCP הוא אזור בתוך זיכרון הערימה. הוא מכיל את המיתרים הייחודיים. כדי להכניס את המיתרים לבריכת המיתרים, צריך לקרוא ל- מתמחה() שיטה. לפני יצירת אובייקט במאגר המחרוזות, ה-JVM בודק אם המחרוזת כבר קיימת במאגר או לא. אם המחרוזת קיימת, ההפניה שלה מוחזרת.
String str = new String('Welcome to JavaTpoint').intern(); // statement - 1 String str1 = new String('Welcome to JavaTpoint').intern(); // statement - 2 System.out.println(str1 == str); // prints true
בקטע הקוד שלמעלה, שיטת intern() מופעלת על אובייקטי String. לכן, הזיכרון מוקצה ב-SCP. עבור ההצהרה השנייה, לא נוצר אובייקט מחרוזת חדש מכיוון שהתוכן של str ו-str1 זהה. לכן, ההפניה של האובייקט שנוצר במשפט הראשון מוחזרת עבור str1. לפיכך, str ו-str1 מצביעים שניהם על אותו זיכרון. מכאן שהמשפט המודפס מודפס נכון.
Java String intern() שיטה לדוגמה
שם קובץ: InternExample.java
public class InternExample{ public static void main(String args[]){ String s1=new String('hello'); String s2='hello'; String s3=s1.intern();//returns string from pool, now it will be same as s2 System.out.println(s1==s2);//false because reference variables are pointing to different instance System.out.println(s2==s3);//true because reference variables are pointing to same instance }}בדוק את זה עכשיו
תְפוּקָה:
false true
Java String intern() שיטה דוגמה 2
בואו נראה עוד דוגמה אחת כדי להבין את מושג המתמחה במחרוזות.
שם קובץ: InternExample2.java
public class InternExample2 { public static void main(String[] args) { String s1 = 'Javatpoint'; String s2 = s1.intern(); String s3 = new String('Javatpoint'); String s4 = s3.intern(); System.out.println(s1==s2); // True System.out.println(s1==s3); // False System.out.println(s1==s4); // True System.out.println(s2==s3); // False System.out.println(s2==s4); // True System.out.println(s3==s4); // False } }בדוק את זה עכשיו
תְפוּקָה:
true false true false true false
נקודות לזכור
להלן כמה נקודות חשובות שכדאי לזכור בנוגע לשיטת intern():
1) מחרוזת מילולית תמיד מפעילה את המתודה intern() בין אם מזכירים את המתודה intern() יחד עם המחרוזת מילולית או לא. לדוגמה,
String s = 'd'.intern(); String p = 'd'; // compiler treats it as String p = 'd'.intern(); System.out.println(s == p); // prints true
2) בכל פעם שאנו יוצרים אובייקט String באמצעות ה- חָדָשׁ מילת מפתח, נוצרים שני אובייקטים. לדוגמה,
String str = new ('Hello World');
כאן, אובייקט אחד נוצר בזיכרון הערימה מחוץ ל-SCP בגלל השימוש במילת המפתח החדשה. כמו שיש לנו גם את המחרוזת מילולית ('Hello World'); לכן, אובייקט אחד נוצר בתוך ה-SCP, בתנאי ש'Hello World' המילולי כבר לא קיים ב-SCP.