في البرمجة الشيئية، سلسلة أو كائنات غير قابلة للتغيير والتي لا يمكن تعديلها بمجرد إنشائها. ولكن يمكننا فقط تغيير المرجع إلى الكائن. نحن نقيد تغيير الكائن نفسه. ال السلسلة غير قابلة للتغيير في جافا بسبب الأمان والمزامنة والتزامن والتخزين المؤقت وتحميل الفصل. السبب في جعل السلسلة نهائية هو تدمير الثبات وعدم السماح للآخرين بتمديده.
يتم تخزين كائنات السلسلة مؤقتًا في تجمع السلسلة، مما يجعل سلسلة غير قابلة للتغيير . يتم الوصول إلى القيم الحرفية للسلسلة المخزنة مؤقتًا بواسطة العديد من العملاء. لذلك، هناك دائمًا خطر، حيث يؤثر الإجراء الذي يقوم به عميل واحد على جميع العملاء الآخرين. على سبيل المثال، إذا قام عميل واحد بتنفيذ إجراء وتغيير قيمة السلسلة من الضغط إلى الضغط، فسوف يقرأ جميع العملاء المتبقين هذه القيمة أيضًا. لسبب الأداء، كان التخزين المؤقت لكائنات السلسلة أمرًا مهمًا، لذا لإزالة هذا الخطر، يتعين علينا جعل السلسلة غير قابلة للتغيير.
هذه بعض الأسباب الإضافية لجعل السلسلة غير قابلة للتغيير:
- لا يمكن أن يكون تجمع السلسلة ممكنًا إذا لم تكن السلسلة غير قابلة للتغيير في Java. يتم حفظ الكثير من مساحة الكومة بواسطة جي آر إي . يمكن الإشارة إلى نفس متغير السلسلة بواسطة أكثر من متغير سلسلة في التجمع. قد لا يكون تدريب السلسلة ممكنًا أيضًا إذا لم تكن السلسلة غير قابلة للتغيير.
- إذا لم نجعل السلسلة غير قابلة للتغيير، فسوف تشكل تهديدًا أمنيًا خطيرًا للتطبيق. على سبيل المثال، يتم تمرير أسماء مستخدمي قاعدة البيانات وكلمات المرور كسلاسل لتلقي اتصالات قاعدة البيانات. ال برمجة المقبس يتم أيضًا تمرير أوصاف المضيف والمنفذ كسلاسل. السلسلة غير قابلة للتغيير، لذا لا يمكن تغيير قيمتها. إذا لم تظل السلسلة غير قابلة للتغيير، فيمكن لأي متسلل أن يسبب مشكلة أمنية في التطبيق عن طريق تغيير القيمة المرجعية.
- السلسلة آمنة لتعدد العمليات بسبب عدم قابليتها للتغيير. يمكن لخيوط مختلفة الوصول إلى 'مثيل سلسلة' واحد. إنه يزيل المزامنة من أجل سلامة الخيط لأننا نجعل السلاسل آمنة ضمنيًا.
- توفر الثبات أمان تحميل الفئة الصحيحة بواسطة Classloader. على سبيل المثال، لنفترض أن لدينا مثيلًا حيث نحاول تحميل فئة java.sql.Connection ولكن التغييرات في القيمة المشار إليها إلى فئة myhacked.Connection تؤدي إلى أشياء غير مرغوب فيها في قاعدة البيانات الخاصة بنا.
دعونا نفهم مفهوم غير قابل للتغيير من خلال مثال.
ImmutableString.java
import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString.concat('World'); System.out.println(NewString); } }
انتاج:
جافا الرياضيات.عشوائية
وصف: يمكننا أن نفهم المثال أعلاه بمساعدة الرسم البياني التالي:
في تجمع ثابت السلسلة، مرحبًا يبقى دون تغيير، ويتم إنشاء كائن سلسلة جديد باستخدام مرحبا بالعالم . يظهر أن السلاسل غير قابلة للتغيير. يشير المتغير المرجعي إلى مرحبًا لا ل مرحبا بالعالم.
وإذا أردنا أن يشير إلى مرحبا بالعالم ، علينا أن نخصصه بشكل صريح لهذا المتغير. على سبيل المثال:
import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString = NewString.concat('World'); System.out.println(NewString); } }
انتاج: