Laith Hassan نشر 30 يونيو 2021 أرسل تقرير نشر 30 يونيو 2021 في readFile لماذا استخدمنا StringBuilder بدلاً من String ... ألم يكن بامكاننا استخدام String ? package session5; import java.io.IOException; /** * * @author bsbos */ public interface Files{ public String modifyFile(Sttring filename,String text); public StringBuilder readFile(Sttring filename); } 1 اقتباس
1 Ali Haidar Ahmad نشر 30 يونيو 2021 أرسل تقرير نشر 30 يونيو 2021 (معدل) النمط String لايقبل الإضافة إليه، بحيث أي طريقة يتم استدعاءها على String تنشئ غرض جديد new String وترده وهذا لأن ال String غير قابل للتعديل، ولا يمكنه تغيير حالته الداخلية. أما StringBuilder فيمكنه ذلك باستخدام الطريقة append. وبالتالي يكون التعامل معه أسرع بكثير وأقل كلفة في الذاكرة فهو لايقوم بإنشاء غرض جديد (استهلاك وقت وذاكرة). مثال يبين أهم فرق بينهما: // String استخدام String s=""; for(int i=0;i<5000;i++) s+=String.valueOf(i); // 4828ms //ٍ StringBuilder أما باستخدام ٍStringBuilder sb=new ٍStringBuilder(); for(int i=0;i<5000;i++) sb.append(String.valueOf(i)); // 4ms باستخدام ال String نحتاح إلى 4828ms على جهازي أما باستخدام Builder فقط 4ms وهذا فرق كبير جداً. أي يمكنك استخدام الاثنين لكن ال StringBuilder أكثر كفاءة مهما كانت المهمة سواءاً قراءة ملف أو التعديل عليه. تم التعديل في 30 يونيو 2021 بواسطة Ali Haidar Ahmad 3 اقتباس
0 ريم المهدي نشر 30 يونيو 2021 أرسل تقرير نشر 30 يونيو 2021 في أي حالة تريد أن تقوم بالتعديل على قيمة نصية يمكنك إستخدام StringBuffer and StringBuilder لانهما يسمحان بذلك (Mutable)، مع العلم أن StringBuilder أسرع من StringBuffer. على عكس String والتي لا تسمح بذلك، راجع المثال أدناه: public class example { public static void StrConcat(String str1){ str1 = str1 + "World!"; } public static void StrBufConcat(StringBuffer str2){ str2.append("World!"); } public static void StrBuildConcat(StringBuilder str3){ str3.append("World!"); } public static void main(String[] args){ String str1 = "Hello "; StrConcat(str1); System.out.println("The final String is - " + str1); StringBuffer str2 = new StringBuffer("Hello "); StrBufConcat(str2); System.out.println("The final String is - " + str2); StringBuilder str3 = new StringBuilder("Hello "); StrBuildConcat(str3); System.out.println("The final String is - " + str3); } } من المخرج نلاحظ أنه لم تتم إضافة أي تعديل على المتغير str1 لأنه معرف String Object، عكس القيم المعرفة str2, str3 المعرفة ك StringBuffer, StringBuilder على التوالي: The final String is - Hello The final String is - Hello World! The final String is - Hello World! اقتباس
السؤال
Laith Hassan
في readFile لماذا استخدمنا StringBuilder بدلاً من String ... ألم يكن بامكاننا استخدام String ?
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.