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.

