Zalecane, 2019

Wybór Redakcji

Różnica między ciągiem znaków a klasą StringBuffer w języku Java

String i StringBuffer to klasy działające na łańcuchach. Klasa StringBuffer jest klasą równorzędną klasy String. Obiekt klasy String ma stałą długość. Obiekt klasy StringBuffer jest możliwy do uzyskania. Podstawową różnicą między String a StringBuffer jest to, że obiekt klasy "String" jest niezmienny . Obiekt klasy "StringBuffer" zmienny .

Wykres porównania

Podstawa do porównaniaStrunowyStringBuffer
PodstawowyDługość obiektu String jest stała.Długość StringBuffer może zostać zwiększona.
ModyfikacjaObiekt String jest niezmienny.Obiekt StringBuffer jest zmienny.
WydajnośćPodczas konkatenacji jest wolniejszy.Jest szybszy podczas konkatenacji.
PamięćZużywa więcej pamięci.Zużywa mniej pamięci.
PrzechowywanieCiąg stała puli.Heap Memory.

Definicja ciągu

"String" to klasa w Javie. Obiekt klasy String ma stałą długość, a co najważniejsze, obiekt klasy String jest "niezmienny". Po zainicjowaniu obiektu String nie można go ponownie zmodyfikować. Obiekt klasy String jest przechowywany w stałej puli String.

Najpierw zrozumiem, że za każdym razem, gdy tworzysz dowolny ciąg; tworzysz obiekt typu string. Stałe łańcuchowe są również obiektami łańcuchowymi.

 System.out.println ("Hello this is Teckpix Solution"); 

W powyższym stwierdzeniu ciąg "Hello this is Teckpix Solution" jest stałą łańcuchową.

Teraz poznajmy zmienność obiektu String za pomocą przykładu.

 String str = new String ("Teckpix"); str.concat ("Rozwiązanie"); system.out.println (str); // wyjście Teckpixa 

W powyższym kodzie próbowałem połączyć dwa ciągi "Teckpix" i "Rozwiązanie". Jak wiemy, kiedy tworzony jest ciąg znaków, oznacza to, że tworzony jest obiekt typu String. Stąd ciąg "Teckpix" tworzy obiekt, którego referencja jest przypisana do obiektu napisowego "str". Następnie próbowałem połączyć kolejny ciąg "Rozwiązanie" z ciągiem "Teckpix", używając metody "concat ()" klasy String.

Ponieważ obiekty String są niezmienne, żadna modyfikacja nie jest wykonywana na łańcuchu "Teckpix", a nowy ciąg "Solution" tworzy kolejny obiekt w puli stałej ciągów. Ale odniesienie do obiektu "Rozwiązanie" nie jest przechwytywane przez żaden obiekt, stąd odniesienie do obiektu Rozwiązanie zostanie utracone, mimo że nadal występuje w puli stałej łańcuchowej. Ponieważ nie ma modyfikacji obiektu Teckpix, kiedy wydrukuję obiekt str, do którego wcześniej przypisałem odniesienie Teckpixa, wydrukuję tylko ciąg "Teckpix".

Definicja StringBuffer

Klasa "StringBuffer" jest klasą peer klasy "String". Klasa StringBuffer zapewnia większą funkcjonalność ciągów. Obiekt klasy StringBuffer może być modyfikowany, ponieważ jego obiekt może być modyfikowany. Długość obiektu StringBuffer jest dozwolona. Możesz wstawiać znaki lub podciągi w środku literału ciągu, który jest przypisany do obiektu StringBuffer lub na jego końcu. StringBuffer przydziela miejsce na 16 dodatkowych znaków, gdy nie jest wymagana żadna określona długość.

Rozumiemy zmienność obiektu StringBuffer na przykładzie:

 StringBuffre Sb = new StringBuffer ("Teckpix"); Sb.append ("Solution"); system.out.println (Sb); // Wyjściowy roztwór Teckpix 

Jak wiemy, obiekt StringBuffer jest zmienny. Metoda append () modyfikuje obiekt StringBuffer Sb, do którego wcześniej przypisano obiekt odniesienia "Teckpix". Metoda append () dołącza nowy napis literowy "Solution", do końca literału "Teckpix". Teraz, kiedy wydrukuję obiekt Sb, wydrukuje zmodyfikowany obiekt napisowy "Rozwiązania Teckpix".

Kluczowa różnica między ciągiem a StringBuffer

  1. Długość obiektu String jest stała, ale długość obiektu StringBuffer może zostać zwiększona w razie potrzeby.
  2. Obiekt String jest niezmienny, tzn. Obiekt nie może być ponownie przypisany, podczas gdy obiekt StringBuffer jest zmienny.
  3. Obiekt String jest wolniejszy w działaniu, natomiast obiekt StringBuffer jest szybszy.
  4. Obiekt String zużywa więcej pamięci, podczas gdy obiekty StringBuffer zużywają mniej pamięci.
  5. Obiekty ciągów są przechowywane w stałej puli, podczas gdy obiekty StringBuffer są przechowywane w pamięci sterty.

Wniosek:

Obiekty StringBuffer zapewniają większą funkcjonalność łańcuchów w porównaniu do klasy String. Dlatego lepiej jest pracować z StringBuffer zamiast klasy String.

Top