تجمع السلسلة الثابتة: فحص متعمق
يتم تجميع حرفية السلسلة في Java لتحسين استخدام الذاكرة وتحسين الأداء. هذا يعني أنه عند مواجهة سلسلة حرفية، يقوم المترجم بالتحقق من تجمع ثابت السلسلة بحثًا عن كائن سلسلة موجود بنفس القيمة. إذا تم العثور عليه، يتم توجيه المرجع إلى الكائن الموجود، مع تجنب إنشاء كائن جديد.
ومع ذلك، ينشأ ارتباك عند استخدام عامل التشغيل "الجديد" لإنشاء كائن سلسلة جديد، حيث يبدو أن هذا يتعارض مع القاعدة. من التدريب. لتوضيح ذلك، دعونا نفحص العبارات التالية:
تشير هذه العبارات إلى أنه أثناء احتجاز السلسلة الحرفية وتخزينها في التجمع، فإن استخدام "جديد" يفرض على JVM إنشاء كائن سلسلة جديد. وهذا يعني أنه على الرغم من وجود سلسلة مكافئة في التجمع، فإن عامل التشغيل "الجديد" يتجاوزها ويخصص كائنًا جديدًا في الذاكرة غير المجمعة.
لتوضيح ذلك، خذ بعين الاعتبار المثال التالي:
String one = new String("test"); String two = "test"; System.out.println(one.equals(two)); // true System.out.println(one == two); // false
كما هو متوقع، قيمة كل من "واحد" و"اثنين" هي "اختبار"، ولكن المقارنة "==" تُرجع خطأ لأنها تشير إلى كائنات سلسلة مختلفة. وذلك لأن استخدام "جديد" يفرض إنشاء كائن سلسلة جديد لـ "واحد"، على الرغم من أن "اختبار" السلسلة الحرفي موجود بالفعل في التجمع.
باختصار، يعمل تجمع سلسلة ثابتة على تحسين استخدام الذاكرة عن طريق إدخال حرفية السلسلة. ومع ذلك، فإن استخدام "الجديد" يتجاوز التجمع ويقوم بإنشاء كائن سلسلة جديد في الذاكرة غير المجمعة. وينتج عن هذا كائنين سلسلة مميزين لهما نفس القيمة ولكن بمراجع مختلفة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3