"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > تجمع السلسلة الثابتة: لماذا يقوم \"الجديد\" بإنشاء كائن سلسلة جديد حتى في حالة وجود الكائن الحرفي؟

تجمع السلسلة الثابتة: لماذا يقوم \"الجديد\" بإنشاء كائن سلسلة جديد حتى في حالة وجود الكائن الحرفي؟

تم النشر بتاريخ 2024-11-06
تصفح:655

String Constant Pool: Why Does \

تجمع السلسلة الثابتة: فحص متعمق

يتم تجميع حرفية السلسلة في Java لتحسين استخدام الذاكرة وتحسين الأداء. هذا يعني أنه عند مواجهة سلسلة حرفية، يقوم المترجم بالتحقق من تجمع ثابت السلسلة بحثًا عن كائن سلسلة موجود بنفس القيمة. إذا تم العثور عليه، يتم توجيه المرجع إلى الكائن الموجود، مع تجنب إنشاء كائن جديد.

ومع ذلك، ينشأ ارتباك عند استخدام عامل التشغيل "الجديد" لإنشاء كائن سلسلة جديد، حيث يبدو أن هذا يتعارض مع القاعدة. من التدريب. لتوضيح ذلك، دعونا نفحص العبارات التالية:

  • "عندما يواجه المترجم سلسلة حرفية، فإنه يتحقق من التجمع لمعرفة ما إذا كانت هناك سلسلة متطابقة بالفعل."
  • "In في حالة "جديد"، لا تزال الإشارات إلى سلسلة حرفية توضع في الجدول الثابت، ولكن عند استخدام "جديد"، فإن JVM ملزم بإنشاء كائن سلسلة جديد في وقت التشغيل، بدلاً من استخدام الكائن من الثابت الجدول."

تشير هذه العبارات إلى أنه أثناء احتجاز السلسلة الحرفية وتخزينها في التجمع، فإن استخدام "جديد" يفرض على 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