Рекомендуємо, 2024

Вибір Редакції

Різниця між класом String і StringBuffer у Java

String і StringBuffer обидва є класи, які працюють на рядках. Клас StringBuffer є класом рівного класу String. Об'єкт класу String має фіксовану довжину. Об'єкт класу StringBuffer є ростим. Основна відмінність між String і StringBuffer полягає в тому, що об'єкт класу "String" є незмінним . Об'єкт класу "StringBuffer" змінюється .

Діаграма порівняння

Основа для порівнянняРядокStringBuffer
ОсновнийДовжину об'єкта String виправлено.Довжина StringBuffer може бути збільшена.
МодифікаціяСтроковий об'єкт є незмінним.Об'єкт StringBuffer змінюється.
ПродуктивністьЦе повільніше під час конкатенації.Це швидше під час конкатенації.
Пам'ятьСпоживає більше пам'яті.Витрачає менше пам'яті.
ЗберіганняРядок постійний пул.Пам'ять купи.

Визначення рядка

“String” - це клас на Java. Об'єкт класу String має фіксовану довжину, і найбільш важливо пам'ятати, що об'єкт класу String є «незмінним». Як тільки ви ініціалізуєте об'єкт String, ви не зможете знову змінити цей об'єкт. Об'єкт класу String зберігається в константному пулі String.

Давайте спочатку зрозуміємо, що всякий раз, коли ви створюєте будь-який рядок; Ви створюєте об'єкт типу string. Строкові константи також є рядковими об'єктами.

 System.out.println ("Привіт це рішення Teckpix"); 

У наведеній вище операції рядок "Hello this is Teckpix Solution" - це константа String.

Тепер зрозуміємо змінність об'єкта String за допомогою прикладу.

 String str = new String ("Teckpix"); str.concat ("Рішення"); system.out.println (str); // виведення Teckpix 

У наведеному вище коді я спробував об'єднати два рядки "Teckpix" і "Solution". Як ми знаємо, коли створюється рядок, що означає, що об'єкт типу String створюється. Отже, рядок «Teckpix» створює об'єкт, посилання якого присвоєно строковому об'єкту «str». Далі, я спробував об'єднати інший рядок "Рішення" з рядком "Teckpix", використовуючи метод "concat ()" класу String.

Оскільки String об'єкти є незмінними, модифікація не виконується для рядка “Teckpix”, а новий рядок “Solution” створює інший об'єкт у рядку константного пулу. Але, посилання на об'єкт «Рішення» не вловлюється будь-яким об'єктом, отже, посилання на об'єктне рішення втрачається, хоча вона все ще присутня в рядку константного пулу. Оскільки до об'єкта Teckpix не робиться жодна модифікація, коли я надрукую об'єкт str, до якого я раніше привласнював посилання Teckpix, виведемо тільки рядок "Teckpix".

Визначення StringBuffer

Клас «StringBuffer» - це клас класу «String». Клас StringBuffer забезпечує більшу функціональність рядків. Об'єкт класу StringBuffer є змінюваним, тобто його об'єкт може бути змінений. Довжина об'єкта StringBuffer росте. Ви можете вставити символи або підрядки в середині літералу рядка, призначеного для об'єкта StringBuffer або в кінці його. StringBuffer виділяє простір для 16 додаткових символів, коли не запитується конкретна довжина.

Давайте зрозуміти змінність об'єкта StringBuffer за допомогою прикладу:

 StringBuffre Sb = новий StringBuffer ("Teckpix"); Sb.append ("Рішення"); system.out.println (Sb); // Вихід Teckpix Solution 

Як відомо, об'єкт StringBuffer є змінюваним. Метод append () модифікує об'єкт StringBuffer Sb, до якого спочатку призначається посилання на об'єкт ”Teckpix”. Метод append () додає новий строковий літерал "Рішення" до кінця рядкового літерала "Teckpix". Тепер, коли я надрукую об'єкт Sb, він надрукує змінений об'єкт рядка "Teckpix Solutions".

Ключова різниця між рядками та StringBuffer

  1. Довжина об'єкта String фіксується, але довжина об'єкта StringBuffer може бути збільшена, коли це необхідно.
  2. Строковий об'єкт є незмінним, тобто його об'єкт не може бути перепризначений знову, тоді як об'єкт StringBuffer змінюється.
  3. Об'єкт String виконується повільніше, тоді як об'єкт StringBuffer швидше.
  4. Об'єкт String споживає більше пам'яті, тоді як об'єкти StringBuffer споживають менше пам'яті.
  5. Строкові об'єкти зберігаються в константному пулі, в той час як об'єкти StringBuffer зберігаються в пам'яті купи.

Висновок:

Об'єкти StringBuffer забезпечують більшу функціональність рядків порівняно з класом String. Отже, краще працювати з StringBuffer замість класу String.

Top