ההבדל בין מחרוזת לשיעור StringBuffer ב- Java

מְחַבֵּר: Laura McKinney
תאריך הבריאה: 3 אַפּרִיל 2021
תאריך עדכון: 13 מאי 2024
Anonim
CS50 2015 - Week 5
וִידֵאוֹ: CS50 2015 - Week 5

תוֹכֶן


מחרוזת ו- StringBuffer הן המעמדות הפועלות על מיתרים. StringBuffer הוא כיתת העמיתים של מחרוזת הכיתה. מטרת מחרוזת היא באורך קבוע. מושא מחלקת StringBuffer ניתן לגדול. ההבדל הבסיסי בין String ו- StringBuffer הוא שמטרת המעמד "String" היא בלתי ניתן לשינוי. מושא הכיתה "StringBuffer" משתנה.

  1. טבלת השוואה
  2. הגדרה
  3. הבדלים עיקריים
  4. סיכום

טבלת השוואה

בסיס להשוואהמחרוזתStringBuffer
בסיסיאורך אובייקט המיתר קבוע.ניתן להגדיל את אורך ה- StringBuffer.
שינויעצם מחרוזת אינו ניתן לשינוי.אובייקט StringBuffer ניתן לשינוי.
ביצועיםזה איטי יותר במהלך השרשור.זה מהיר יותר במהלך שרשור.
זיכרוןצורכת יותר זיכרון.צורכת פחות זיכרון.
אחסוןמחרוזת בריכה קבועה.זיכרון ערימה.


הגדרת מיתר

"מחרוזת" היא כיתה ב- Java. האובייקט של מחרוזת הכיתה הוא באורך קבוע, והכי חשוב לזכור, האובייקט של מחרוזת הכיתה הוא "בלתי משתנה". לאחר שתאתחל את אובייקט המחרוזת, אינך יכול לשנות את האובייקט שוב. מושא מחרוזת הכיתה מאוחסן בבריכת מחרוזת קבועה.

הבה ראשית, כי בכל פעם שאתה יוצר מחרוזת כלשהי; אתה יוצר אובייקט מסוג מחרוזת. קבועי המיתרים הם גם חפצי מיתר.

System.out.ln ("שלום זה פיתרון Teckpix");

בהצהרה שלמעלה, המחרוזת "שלום זה פיתרון Teckpix" היא קבוע מחרוזת.

כעת הבנו את ההחלפות של אובייקט המיתר בעזרת דוגמא.

String str = מחרוזת חדשה ("Teckpix"); str.concat ("פיתרון"); system.out.ln (str); // פתיחת Teckpix

בקוד לעיל ניסיתי לשרשר בין שני המיתרים "Teckpix" ו- "Solution". כידוע בכל פעם שנוצר מחרוזת שמשמעותו נוצר אובייקט מסוג מחרוזת. מכאן שהמחרוזת "Teckpix" יוצרת אובייקט שהתייחסותו מוקצה לאובייקט המחרוזת "str". בשלב הבא ניסיתי לשרשר מחרוזת אחרת "פתרון" עם המחרוזת "Teckpix" בשיטה "concat ()" של מחרוזת הכיתה.


מכיוון שאובייקטים של מחרוזת אינם ניתנים לשינוי, לא מתבצע שום שינוי במחרוזת "Teckpix" והמחרוזת החדשה "Solution" יוצרת אובייקט אחר בבריכה הקבועה של המיתרים. עם זאת, ההתייחסות לאובייקט "פיתרון" לא נתפסת על ידי אף אובייקט ומכאן שההתייחסות לאובייקט פתרון הולכת לאיבוד אם כי היא עדיין קיימת בבריכה הקבועה של המיתרים. מכיוון שלא נעשה שום שינוי באובייקט Teckpix, כאשר אני האובייקט str שאליו הקצתי את ההפניה של Teckpix קודם לכן, יהיה המחרוזת "Teckpix" בלבד.

הגדרת StringBuffer

הכיתה "StringBuffer" היא כיתת העמיתים של הכיתה "מחרוזת". StringBuffer בכיתה מספק פונקציונליות רבה יותר למיתרים. ניתן לשנות את האובייקט של מחלקת StringBuffer וזה האובייקט שניתן לשנות. אורך האובייקט StringBuffer ניתן לגדול. אתה יכול להכניס את התווים או המצעים באמצע מילולי המיתר המוקצים לאובייקט StringBuffer או בסוף זה. StringBuffer מקצה מקום ל -16 תווים נוספים כאשר לא מתבקש אורך ספציפי.

הבה נבין את ההדדיות של אובייקט ה- StringBuffer בעזרת דוגמא:

StringBuffer Sb = StringBuffer חדש ("Teckpix"); Sb.append ("פיתרון"); system.out.ln (Sb); // פתרון Teckpix לפלט

כידוע שאובייקט ה- StringBuffer ניתן לשינוי. שיטת התוספת () משנה את האובייקט StringBuffer Sb אליו בתחילה מוקצה הפניה לאובייקט Teckpix מוקדם יותר. השיטה הוסף () מצרפת את מיתר המילולי החדש "פיתרון", לסוף מחרוזת המילולית "Teckpix". עכשיו כשאני אובייקט Sb זה יהיה אובייקט המחרוזת ששונה "פתרונות Teckpix".

  1. אורך של אובייקט מחרוזת קבוע אך ניתן להגדיל את אורך האובייקט של StringBuffer בעת הצורך.
  2. אובייקט מחרוזת אינו ניתן לשינוי, כלומר לא ניתן להקצות שוב את האובייקט ואילו האובייקט של StringBuffer ניתן להשתנות.
  3. אובייקט מחרוזת איטי בביצועים ואילו אובייקט StringBuffer מהיר יותר.
  4. אובייקט מחרוזת צורך יותר זיכרון ואילו אובייקטים של StringBuffer צורכים פחות זיכרון.
  5. חפצי מחרוזת מאוחסנים בבריכה קבועה ואילו אובייקטים של StringBuffer מאוחסנים בזיכרון הערימה.

סיכום:

אובייקטים של StringBuffer מספקים פונקציונליות רבה יותר למיתרים בהשוואה למחרוזת המחלקה. מכאן שעדיף לעבוד עם StringBuffer במקום מחרוזת כיתתית.