ال فئة سلسلة جافا المتدرب() تقوم الطريقة بإرجاع السلسلة الداخلية. تقوم بإرجاع التمثيل المتعارف عليه للسلسلة.
يمكن استخدامه لإرجاع سلسلة من الذاكرة إذا تم إنشاؤها بواسطة كلمة رئيسية جديدة. يقوم بإنشاء نسخة طبق الأصل من كائن سلسلة الكومة في تجمع سلسلة ثابتة.
إمضاء
توقيع طريقة المتدرب () موضح أدناه:
public String intern()
عائدات
سلسلة المعتقلين
الحاجة إلى طريقة String.intern() وعملها
عندما يتم إنشاء سلسلة في Java، فإنها تشغل الذاكرة في الكومة. كما نعلم أن فئة السلسلة غير قابلة للتغيير. لذلك، عندما نقوم بإنشاء سلسلة باستخدام الكلمة الأساسية الجديدة، يتم تخصيص ذاكرة جديدة في الكومة للسلسلة المقابلة، بغض النظر عن محتوى المصفوفة. خذ بعين الاعتبار مقتطف التعليمات البرمجية التالي.
جافا فرز المصفوفات
String str = new String('Welcome to JavaTpoint.'); String str1 = new String('Welcome to JavaTpoint'); System.out.println(str1 == str); // prints false
طباعة بيان println خطأ لأنه تم تخصيص ذاكرة منفصلة لكل سلسلة حرفية. وبالتالي، يتم إنشاء كائنين سلسلة جديدين في الذاكرة، أي str وstr1. الذي يحمل مراجع مختلفة.
نحن نعلم أن إنشاء كائن هو عملية مكلفة في Java. لذلك، لتوفير الوقت، توصل مطورو 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() على كائنات السلسلة. ولذلك، يتم تخصيص الذاكرة في SCP. بالنسبة للبيان الثاني، لم يتم إنشاء كائن سلسلة جديد لأن محتوى str وstr1 متماثلان. ولذلك، يتم إرجاع مرجع الكائن الذي تم إنشاؤه في العبارة الأولى لـ str1. وبالتالي، يشير كل من str وstr1 إلى نفس الذاكرة. وبالتالي، طباعة بيان الطباعة صحيح.
مثال على طريقة Java String intern()
اسم الملف: InterExample.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
جافا سلسلة المتدرب () طريقة المثال 2
دعونا نرى مثالًا آخر لفهم مفهوم السلسلة المتدربة.
اسم الملف: InterExample2.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
نقطة لنتذكر
فيما يلي بعض النقاط المهمة التي يجب تذكرها فيما يتعلق بطريقة المتدرب ():
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 str = new ('Hello World');
هنا، يتم إنشاء كائن واحد في ذاكرة الكومة خارج SCP بسبب استخدام الكلمة الأساسية الجديدة. نظرًا لأننا حصلنا على السلسلة الحرفية أيضًا ('Hello World')؛ لذلك، يتم إنشاء كائن واحد داخل SCP، بشرط ألا يكون 'Hello World' الحرفي موجودًا بالفعل في SCP.