اذهب إلى المحتوى

السؤال

نشر

في  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);
}

 

Recommended Posts

  • 1
نشر (معدل)

النمط 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  أكثر كفاءة مهما كانت المهمة سواءاً قراءة ملف أو التعديل عليه.

تم التعديل في بواسطة Ali Haidar Ahmad
  • 0
نشر

في أي حالة تريد أن تقوم بالتعديل على قيمة نصية يمكنك إستخدام 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!

 

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...