العودة إلى الدورة

معالجة النصوص: فئة String مقابل StringBuilder و StringBuffer

إتقان لغة Java: من الصفر إلى مطور محترف (رحلة من 50 درساً)

الدرس 30: معالجة النصوص: String مقابل StringBuilder/StringBuffer

التعامل مع النصوص أمر أساسي، وتوفر Java ثلاث فئات رئيسية لهذا الغرض.

1. فئة String (غير قابلة للتغيير - Immutable)

النصوص في Java غير قابلة للتغيير ، مما يعني أنه بمجرد إنشاء كائن String ، لا يمكن تغيير قيمته. أي عملية تبدو وكأنها تعدل النص (مثل الدمج) تنشئ في الواقع كائناً نصياً جديداً تماماً في الذاكرة.

java String s = "Java"; s = s + " Course"; // تم إنشاء كائن String جديد ويشير 's' إليه.

// دوال String الشائعة: String name = " Alice "; name = name.trim(); // يزيل المسافات int index = name.indexOf('i'); // يجد موقع الحرف boolean check = name.startsWith("Al"); // true

متى تستخدم String: لبيانات النصوص البسيطة والثابتة أو عندما لا تتغير قيم النصوص بشكل متكرر.

2. StringBuilder (قابل للتغيير وغير متزامن)

كائنات StringBuilder قابلة للتغيير ، مما يعني أنه يمكن تعديلها دون إنشاء كائن جديد في كل مرة. وهذا يجعلها فعالة للغاية للعمليات التي تتضمن تعديلات متكررة (إلحاق، إدراج، حذف).

java StringBuilder sb = new StringBuilder("Start"); sb.append("ing"); // sb لا يزال يشير إلى نفس الكائن في الذاكرة sb.insert(0, "Re");

System.out.println(sb.toString()); // المخرج: Restarting

متى تستخدم StringBuilder: عند إجراء معالجة مكثفة للنصوص داخل خيط واحد (السيناريو الأكثر شيوعاً).

3. StringBuffer (قابل للتغيير ومتزامن)

StringBuffer مماثل وظيفياً لـ StringBuilder ، لكن دواله متزامنة (synchronized) (آمنة للخيوط المتعددة). التزامن يضيف حملاً إضافياً على الأداء.

متى تستخدم StringBuffer: فقط عند العمل في بيئة خيوط متعددة حيث قد تصل عدة خيوط وتعدل نفس التسلسل في وقت واحد.

الميزةStringStringBuilderStringBuffer
القابلية للتغييرغير قابل للتغييرقابل للتغييرقابل للتغيير
الأداءبطيء (عند التعديل)سريعأبطأ (بسبب التزامن)
الأمان مع الخيوطنعملانعم