StringBuffer مقابل StringBuilder: الفرق بين StringBuffer و StringBuilder

نشرت: 2020-10-20

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

في هذه المقالة ، سنستعرض كلا الفصلين ونناقش الاختلافات بينهما. قبل الغوص في الفصول الدراسية ، يجب أن نتعرف على مفهوم الجمل في Java.

جدول المحتويات

سلاسل في جافا

تُستخدم الجمل في Java لتخزين سلسلة من قيم الأحرف. يتم التعامل معها ككائنات في لغة برمجة Java. لدينا خيارات متنوعة لإنشاء السلاسل ومعالجتها.

لإنشاء سلسلة ، يكون بناء الجملة الأساسي كما يلي:

جملة سلسلة = "مرحبًا ، أيها العالم!" ؛

السلاسل لها بعض الخصائص ، وأحدها أنها غير قابلة للتغيير ، مما يعني أنه لا يمكن تعديلها. ولكن ماذا لو كنت تريد سلسلة يمكن تعديلها. للقيام بذلك ، يتم استخدام تعديلات Java تسمى String Buffers و String Builders. الآن بعد أن أصبح لدينا فهم لماهية السلاسل ، سنواصل المقارنة بيننا.

يجب أن تقرأ: أفكار وموضوعات مشروع Java

تعلم دورات البرمجيات عبر الإنترنت من أفضل الجامعات في العالم. اربح برامج PG التنفيذية أو برامج الشهادات المتقدمة أو برامج الماجستير لتتبع حياتك المهنية بشكل سريع.

StringBuffer

String Buffer هو تعديل للفئة يستخدم في Java لإضافة المزيد من الوظائف إلى السلاسل من خلال إعطاء خصائص مثل قابلية التغيير. يمكننا استخدام طرق مثل append () و insert () و reverse () و replace () وما إلى ذلك لتعديل السلاسل. يحتوي StringBuffer على أربعة منشآت محددة ؛ وهم على النحو التالي:

  • StringBuffer (): يؤدي هذا إلى إنشاء مخزن مؤقت لسلسلة فارغة بدون خصائص بسعة 16 حرفًا.
  • StringBuffer (CharSequence chars ): يقوم بإنشاء StringBuffer يحتوي على نفس الأحرف مثل CharSequence المحدد.
  • StringBuffer (حجم int): يؤدي هذا إلى إنشاء StringBuffer بدون أحرف بسعة أولية محددة.
  • StringBuffer (String str ): يقوم بإنشاء كائن StringBuffer بسلسلة محددة في البداية.

دعونا نناقش بعض الطرق المختلفة التي يمكننا استخدامها في StringBuffer لتعديل سلسلة معينة:

  • الطول () والسعة (): يمكن العثور على الطول الحالي لـ StringBuffer بمساعدة طريقة length () بينما للعثور على السعة الإجمالية ، نستخدم طريقة السعة ().
  • append (): تُستخدم طريقة append () لربط السلسلة بأنواع بيانات أخرى أو مشابهة. يمكننا إلحاق سلاسل وأرقام وكائنات بسلسلة باستخدام هذه الطريقة.
  • إدراج (): تُستخدم هذه الطريقة لإدراج سلسلة في سلسلة أخرى.
  • charAt (): تُستخدم هذه الطريقة للعثور على قيمة حرف واحد في StringBuffer.

يمكننا أن نرى كيف يمكننا استخدام StringBuffer لتعديل السلاسل وفقًا لاحتياجاتنا. فلماذا نستخدم StringBuilder عندما نتمكن من الحصول على هذه الوظائف مع StringBuffer؟

تعلم: أهم 20 فكرة لمشروع Android رائج وموضوعات للمبتدئين

StringBuilder

StringBuilder في Java عبارة عن سلسلة من الأحرف القابلة للتغيير. يوفر StringBuilder فئة بديلة لعمل سلاسل يمكن تعديلها كما نعلم أن السلاسل غير قابلة للتغيير. إنه مشابه جدًا لـ StringBuffer ، ولكن حيث يختلف الاثنان في المزامنة. StringBuilder غير متزامن ، وهذا بدوره يعني أنه ليس مؤشر ترابط آمن. يحتوي StringBuilder أيضًا على أربعة منشئات محددة ؛ وهم على النحو التالي:

  • StringBuilder (): يقوم بإنشاء StringBuilder فارغ مع غرفة لـ 16 حرفًا.
  • StringBuilder (حجم int): يصنع سلسلة فارغة بحجم محدد.
  • StringBuilder (CharSequence seq): يقوم بإنشاء StringBuilder يحتوي على نفس الأحرف مثل CharSequence المحدد.
  • StringBuilder (String str ): ينشئ كائن String Builder بسلسلة سلسلة محددة في البداية.

دعونا نناقش بعض الطرق التي يمكننا استخدامها في StringBuilders:

  • append (): تُستخدم هذه الطريقة عندما تريد إلحاق شيء ما بالسلسلة سواء كانت سلسلة أو رقمًا أو كائنًا.
  • استبدال (): إذا كنت تريد استبدال سلسلة من الأحرف من مجموعة أخرى من الأحرف ، فيمكنك استخدام طريقة replace ().
  • Substring (): إذا كنت ستحصل على جزء من سلسلة يمكنك الحصول عليها باستخدام طريقة substring ().

كما نرى أن StringBuffer و StringBuilder يبدو أنهما متماثلان. على الرغم من أن لديهم وظائف متشابهة ، إلا أنهم مختلفون تمامًا ، وقد يكون من الأفضل لك استخدام أحدهما بدلاً من الآخر في كثير من الحالات.

الفروق بين الفئتين

التزامن

بشكل افتراضي ، تتم مزامنة StringBuffer ، بينما لا يحتوي StringBuilder على أي مزامنة. في الحالات التي يجب فيها الوصول إلى السلسلة بواسطة مؤشرات ترابط متعددة ولا يتم تطبيق أي مزامنة خارجية ، يجب عليك استخدام StringBuffer وليس StringBuilder.

خيط آمن

StringBuilder ليست فئة آمنة لمؤشر الترابط ، بينما StringBuffer لها هذه الخاصية ؛ هذا يرجع إلى حقيقة أن StringBuffer متزامن.

سرعة

نظرًا للخاصيتين المذكورتين أعلاه ، فإن StringBuffer يكون أبطأ مقارنة بـ StringBuilder. لذلك إذا كنت ترغب في الحصول على أداء أسرع ولا تتطلب الخصائص المذكورة أعلاه ، فإن سرعة وكفاءة StringBuilder تجعله خيارًا أفضل.

تم تقديم StringBuilder wad في Java 1.5 من خلال تحليل عيوب StringBuffer ولديه تغييرات كافية تجعله قابلاً للتطبيق في مواقف معينة حيث قد يكون للأول تأثير على الأداء.

الأداء واستهلاك الذاكرة

كما يمكننا أن نتعلم من النقاط أعلاه ، فإن StringBuilder أسرع عندما يتعلق الأمر بالأداء مقارنة بـ StringBuffer. يختلف استهلاك الذاكرة بين الاثنين أيضًا حيث يستهلك StringBuffer ذاكرة أكبر مقارنةً بالأخيرة.

اقرأ أيضًا: أفضل 130+ أسئلة وأجوبة مقابلة Java

تغليف

على الرغم من تصنيف StringBuilder كبديل لفئة السلسلة النصية مثل StringBuffer ، إلا أنها أكثر مرونة عندما يتعلق الأمر بالاستخدام.

لذلك ، كما ترى ، إذا كنت تريد تعديل السلاسل التي تكون افتراضيًا مجموعة من الأحرف غير قابلة للتغيير ، فيجب عليك استخدام فئات StringBuffer أو StringBuilder لأنها توفر القدرة على تغيير السلاسل. كلا الفئتين متشابهتان على السطح ، كما ترون ، تستخدمان نفس الأساليب والمنشآت المتشابهة.

يرجع الاختلاف بين الاثنين إلى المزامنة والترابط. إذا كنت تعمل في بيئة لا تهتم فيها بسلامة مؤشر الترابط ، فيمكنك استخدام StringBuilder لأنه سيكون أسرع وأكثر كفاءة ، ولكن إذا كنت بحاجة إلى أمان مؤشر الترابط ، فيجب عليك استخدام StringBuffer لأنه متزامن وخيط- آمنة.

إذا كنت مهتمًا بمعرفة المزيد عن Java ، وتطوير البرامج المتكاملة ، فراجع برنامج upGrad & IIIT-B التنفيذي PG في تطوير البرمجيات - التخصص في الأمن السيبراني المصمم للمهنيين العاملين ويقدم أكثر من 500 ساعة من التدريب الصارم ، أكثر من 9 مشاريع ، ومهام ، وحالة خريجي IIIT-B ، ومشاريع التخرج العملية العملية والمساعدة في العمل مع الشركات الكبرى.

انطلق في وظيفة أحلامك

تقدم بطلب للحصول على ماجستير العلوم في علوم الكمبيوتر