StringBuffer kontra StringBuilder
Java to bardzo popularny język obiektowy. W Javie klasa String jest dostarczana do przechowywania sekwencji znaków, których nie można modyfikować (po zainicjowaniu). Alternatywnie język programowania Java udostępnia dwa typy mutowalnych sekwencji znaków. Oznacza to, że gdy programiści muszą zmodyfikować określony String (po zainicjowaniu), muszą użyć klasy StringBuffer lub klasy StringBuilder zamiast klasy String. StringBuffer został wprowadzony w JDK 1.0, a klasa StringBuilder została wprowadzona w JDK 1.5, właściwie jako zamiennik dla klasy StringBuffer (dla środowisk jednowątkowych).
Co to jest StringBuffer?
Klasa StringBuffer została wprowadzona w JDK 1.0. Klasa StringBuffer należy do pakietu java.lang i jest dziedziczona z ogólnego obiektu java.lang. Programiści nie mogą go dalej rozszerzać, ponieważ jest to klasa końcowa. Klasa StringBuffer implementuje interfejsy Serializable, Appendable i CharSequience. Obiekt klasy StringBuffer może zawierać sekwencję znaków, która jest zmienna i bezpieczna wątkowo. Oznacza to, że jest bardzo podobny do obiektu String, ale kolejność znaków (długość i zawartość) można zmienić w dowolnym momencie po zainicjowaniu obiektu StringBuffer. Należy to jednak zrobić za pomocą określonych metod udostępnianych przez klasę StringBuffer. W klasie StringBuffer są dwie podstawowe operacje. Są one dostarczane przez metody append() i insert(). Metody te są przeciążone, więc są w stanie akceptować dane dowolnego typu, takie jak liczby całkowite i długie. Obie metody najpierw przekształcają dowolne dane wejściowe w ciąg, a następnie dodają (dołącza lub wstawia) znaki odpowiedniego ciągu do istniejącego obiektu Stribbuffer. Metoda append() dodaje przekonwertowany ciąg na koniec istniejącego obiektu StringBuffer, podczas gdy metoda insert() doda znaki wejściowe do określonego punktu wstawiania.
Co to jest StringBuilder?
Klasa StringBuilder została wprowadzona w JDK 1.5. StringBuilder API jest bardzo podobny do StringBuffer API. W rzeczywistości klasa StringBuilder została faktycznie wprowadzona jako zamiennik klasy StringBuffer (dla aplikacji jednowątkowych). Klasa StringBuilder należy do pakietu java.lang i jest dziedziczona z ogólnego obiektu java.lang. Jest to klasa końcowa, więc programiści nie mogą jej rozszerzać. Klasa StringBuilder implementuje interfejsy Serializable, Appendable i CharSequience. Obiekt klasy StringBuilder może zawierać sekwencję znaków, która jest zmienna, ale nie jest bezpieczna wątkowo. Oznacza to, że jest bardzo podobny do obiektu String, ale ciąg można zmienić w dowolnym momencie. Ale klasa StringBuilder nie zapewnia synchronizacji i dlatego jest uważana za szybszą niż użycie klasy StringBuffer. Klasa StringBuilder udostępnia metody append() i insert() o dokładnie podobnej funkcjonalności jak w klasie StringBuffer.
Jaka jest różnica między StringBuffer a StringBuilder?
Chociaż klasy StringBuilder i StringBuffer mogą być używane do zmiennych sekwencji znaków w Javie, mają one kluczową różnicę. W przeciwieństwie do klasy StringBuffer, klasa StringBuilder nie jest bezpieczna wątkowo i nie zapewnia synchronizacji. Dlatego zaleca się, aby w aplikacjach jednowątkowych zamiast klasy StringBuffer używać klasy StringBuilder, ponieważ twierdzi się, że klasa StringBuilder będzie znacznie szybsza niż klasa StringBuffer (w normalnych warunkach).