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

Автор: Laura McKinney
Дата Створення: 3 Квітень 2021
Дата Оновлення: 15 Травень 2024
Anonim
Бібліотека. Java + Spring Boot. N + 1 issue (Урок 11)
Відеоролик: Бібліотека. Java + Spring Boot. N + 1 issue (Урок 11)

Зміст


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

  1. Порівняльна діаграма
  2. Визначення
  3. Ключові відмінності
  4. Висновок

Порівняльна діаграма

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


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

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

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

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

У наведеному вище твердженні рядок "Здрастуй, це рішення Teckpix" - це константа String.

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

String str = новий рядок ("Teckpix"); str.concat ("Рішення"); system.out.ln (str); // вихід Teckpix

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


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

Визначення StringBuffer

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

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

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

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

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

Висновок:

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