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.