في Java و String و StringBuffer و StringBuilder غالبًا ما يتم استخدام فئات السلسلة في البرمجة. الفرق بينهما هو أيضًا سؤال يُطرح غالبًا في المقابلات. لخص الآن وانظر كيف تكون مختلفة ونفس الشيء.
1. متغير وغير قابل للتغيير
يستخدم فئة السلسلة مجموعة أحرف لحفظ السلاسل ، على النحو التالي: نظرًا لوجود معدل "نهائي" ، يمكنك معرفة أن كائنات السلسلة غير قابلة للتغيير.
قيمة char النهائية الخاصة [] ؛
كل من StringBuilder و StringBuffer موروثة من فئة AbstractStringBuilder. في AbstractStringBuilder ، يتم استخدام صفائف الأحرف لحفظ السلاسل. على النحو التالي ، يمكن ملاحظة أن كلا الكائنين قابلة للتغيير.
char [] القيمة ؛
2. هل هو متعدد الخيوط وآمنة؟
الكائنات الموجودة في السلسلة غير قابلة للتغيير ، بحيث يمكن فهمها على أنها ثوابت ، والتي من الواضح أنها آمنة للخيط.
AbstractStringBuilder هي فئة من الوالدين العامين من StringBuilder و StringBuffer ، والتي تحدد بعض العمليات الأساسية للسلاسل ، مثل SextedCapity ، إلحاق ، إدراج ، فهرس وغيرها من الأساليب العامة.
أضاف StringBuffer قفل المزامنة إلى الطريقة أو قفل المزامنة إلى الطريقة المدعو ، لذلك فهو آمن مؤشر الترابط. انظر رمز المصدر التالي:
stringbuffer stringbuffer العامة () {super.reverse () ؛ إرجاع هذا ؛} الفهرس العام العام (String str) {return indexof (str ،) ؛ // هناك طريقة int متزامنة عامة (String str ، int fromIndex)} لا يضيف StringBuilder أقفال المزامنة إلى هذه الطريقة ، لذلك فهو غير آمن.
3. StringBuilder و StringBuffer مشترك
StringBuilder و StringBuffer لديهم فئات الوالدين العامة AbstractStringBuilder (فئة مجردة).
أحد الاختلافات بين الطبقات المجردة والواجهات هو أنه يمكن تعريف بعض الأساليب العامة للفئات الفرعية في الفئات المجردة. تحتاج الفئات الفرعية فقط إلى إضافة وظائف جديدة ولا تحتاج إلى تكرار الأساليب الحالية ؛ بينما تحدد الواجهات الأساليب والثوابت فقط.
ستتصل طرق StringBuilder و StringBuffer بالأساليب العامة في AbstractStringBuilder ، مثل Super.Append (...). إنه فقط أن StringBuffer سيضيف كلمة رئيسية متزامنة إلى الطريقة ومزامنةها.
أخيرًا ، إذا لم يكن البرنامج متعدد الخيوط ، فإن استخدام StringBuilder يكون أكثر كفاءة من StringBuffer.
ملخص للفرق بين سلسلة StringBuffer StringBuilder في Java
* سلسلة فئة هي فئة غير قابلة للتغيير. طالما تم تعديل السلسلة ، سيتم إنشاء كائنات جديدة.
* StringBuffer و StringBuilder كلاهما فئتين قابلة للتغيير ، ولا يتم إنشاء كائنات جديدة بأي تغييرات على السلاسل.
عند استخدامه في الممارسة العملية ، إذا كنت بحاجة غالبًا إلى تعديل سلسلة ، مثل الإدراج ، والحذف ، إلخ.
* ولكن ما هو الفرق بين StringBuffer و StringBuilder؟
يعد StringBuffer آمنًا ومريحًا للغاية لاستخدامه في البرامج متعددة الخيوط ، ولكن كفاءة البرنامج ستكون أبطأ.
StringBuilder ليس آمنًا لخيط الخيط وهو أكثر كفاءة من StringBuffer في موضوع واحد.
* بشكل عام ، وقت تشغيل الثلاثة:
String> StringBuffer> StringBuilder