CharSequence לעומת מחרוזת בג'אווה

1. הקדמה

פשוט שים, CharSequence ו חוּט הם שני מושגים בסיסיים שונים ב- Java.

במאמר מהיר זה, נבחן את ההבדלים בין סוגים אלה ומתי להשתמש בכל אחד מהם.

2. CharSequence

CharSequence הוא ממשק המייצג רצף של תווים. המישוש אינו אוכף על ידי ממשק זה. לכן, גם שיעורים ניתנים לשינוי וגם בלתי משתנים מיישמים ממשק זה.

כמובן שלא ניתן לייצר ממשק באופן מיידי; יש צורך בהטמעה כדי ליצור משתנה:

CharSequence charSequence = "baeldung";

פה, charSequence הוא מייצר עם חוּט. יישום יישומים אחרים:

CharSequence charSequence = StringBuffer חדש ("באלדונג"); CharSequence charSequence = StringBuilder חדש ("באלדונג");

3. חוּט

חוּט הוא רצף של תווים בג'אווה. זהו מחלקה בלתי ניתנת לשינוי ואחד הסוגים הנפוצים ביותר ב- Java. כיתה זו מיישמת את CharSequence, ניתן לבצע סדרתי, ו ניתן להשוות ממשקים.

להלן שתי ההפעלות יוצרות מיתרים עם אותו תוכן. עם זאת, הם אינם שווים זה לזה:

@Test public void givenUsingString_whenInstantiatingString_thenWrong () {CharSequence firstString = "baeldung"; מחרוזת secondString = "baeldung"; assertNotEquals (firstString, secondString); }

4. CharSequence לעומת. חוּט

בואו נשווה את ההבדלים והמשותפים של CharSequence ו חוּט. שניהם מתגוררים באותה חבילה בשם java.lang., אך הראשון הוא ממשק והשני הוא מעמד קונקרטי. יתר על כן, ה חוּט הכיתה אינה ניתנת לשינוי.

בדוגמה הבאה, כל פעולת סכום יוצרת מופע אחר, מגדילה את כמות הנתונים המאוחסנת ומחזירה את האחרונה שנוצרה חוּט:

@Test הציבור בטל givenString_whenAppended_thenUnmodified () {Test String = "a"; int firstAddressOfTest = System.identityHashCode (מבחן); test + = "b"; int secondAddressOfTest = System.identityHashCode (מבחן); assertNotEquals (firstAddressOfTest, secondAddressOfTest); }

מצד שני, StringBuilder מעדכן את כבר נוצר חוּט להחזיק את הערך החדש:

@Test הציבור בטל givenStringBuilder_whenAppended_thenModified () {מבחן StringBuilder = StringBuilder חדש (); test.append ("a"); int firstAddressOfTest = System.identityHashCode (מבחן); test.append ("b"); int secondAddressOfTest = System.identityHashCode (מבחן); assertEquals (firstAddressOfTest, secondAddressOfTest); }

הבדל נוסף הוא שהממשק אינו מרמז על אסטרטגיית השוואה מובנית, ואילו ה- חוּט הכיתה מיישמת את ניתן להשוות מִמְשָׁק.

להשוות בין שניים CharSequenceאנחנו יכולים ללהק אותם ל חוּטלאחר מכן השווה אותם:

@Test הציבור בטל givenIdenticalCharSequences_whenCastToString_thenEqual () {CharSequence charSeq1 = "baeldung_1"; CharSequence charSeq2 = "baeldung_2"; assertTrue (charSeq1.toString (). CompareTo (charSeq2.toString ())> 0); }

5. מסקנה

אנחנו בדרך כלל משתמשים חוּט במקומות שבהם אנחנו לא בטוחים במה להשתמש לרצפי צ'אר. עם זאת, במקרים מסוימים, StringBuilder ו StringBuffer יכול להיות מתאים יותר.

תוכל למצוא מידע נוסף ב- JavaDocs אודות CharSequence ו חוּט.

וכמו תמיד, ניתן למצוא את היישום של כל הדוגמאות וקטעי הקוד באתר Github.


$config[zx-auto] not found$config[zx-overlay] not found