Jaka jest różnica pomiędzy metodami length() i capacity() w klasie String w Javie?

W Javie, klasy takie jak String oferują różne metody do zarządzania i manipulowania tekstami. Dwie z nich, które często mylą początkujących programistów, to length() i capacity(). Choć mogą się wydawać podobne, służą do różnych celów i mają różne zastosowania.

length() vs capacity()

Metoda length() zwraca liczbę znaków w łańcuchu tekstowym, natomiast capacity() jest metodą związana z klasą StringBuilder lub StringBuffer, a nie z klasą String. capacity() zwraca pojemność bufora, czyli ilość miejsca zarezerwowanego dla znaków, niezależnie od faktycznej ich ilości. To ważne rozróżnienie, ponieważ String w Javie jest niemutowalny (nie można zmienić jego zawartości po utworzeniu), podczas gdy StringBuilder i StringBuffer są mutowalne.

Przykład kodu w Java

Załóżmy, że chcemy zilustrować różnicę między length() a capacity() za pomocą klasy StringBuilder, gdyż klasa String nie posiada metody capacity().

public class StringMethods {
    public static void main(String[] args) {
        // Tworzenie nowego obiektu StringBuilder
        StringBuilder sb = new StringBuilder("Hello");

        // Wyświetlenie początkowej zawartości
        System.out.println("Zawartość: " + sb.toString());

        // Wyświetlenie długości łańcucha znaków
        System.out.println("Długość: " + sb.length()); // Wyświetla 5

        // Wyświetlenie pojemności bufora
        System.out.println("Pojemność: " + sb.capacity()); // Wyświetla 21

        // Dodanie więcej znaków
        sb.append(" World!");

        // Wyświetlenie nowej zawartości
        System.out.println("Nowa zawartość: " + sb.toString());

        // Wyświetlenie nowej długości łańcucha znaków
        System.out.println("Nowa długość: " + sb.length()); // Wyświetla 12

        // Wyświetlenie nowej pojemności bufora
        System.out.println("Nowa pojemność: " + sb.capacity()); // Nadal 21
    }
}

Podsumowanie

Rozumienie różnicy między length() a capacity() jest kluczowe dla efektywnego zarządzania pamięcią w aplikacjach Javy. Metoda length() odnosi się do faktycznej długości łańcucha znaków, natomiast capacity() odnosi się do pojemności bufora, co jest istotne w kontekście optymalizacji zasobów, zwłaszcza przy manipulacji dużymi tekstami za pomocą klas takich jak StringBuilder i StringBuffer.

Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video Java w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.

Scroll to Top