Trataré de explicar esto con un ejemplo.
public class StringBuilderDemo {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
System.out.println(sb.length());
System.out.println(sb.capacity());
}
}
length()
- la longitud de la secuencia de caracteres en el constructor ya que este StringBuilder no contiene ningún contenido, su longitud será 0.
capacity()
- el número de espacios de caracteres que se han asignado . Cuando intenta construir un generador de cadenas con contenido vacío, de forma predeterminada toma el tamaño de inicialización como longitud + 16 que es 0 + 16. entonces la capacidad regresaría 16 aquí.
Nota: La capacidad, que es devuelta por el método capacity(), siempre es mayor o igual que la longitud (generalmente mayor que) y se expandirá automáticamente según sea necesario para acomodar adiciones al generador de cadenas.
La lógica detrás de la función de capacidad:
- Si no inicializar StringBuilder con cualquier contenido, la capacidad por defecto será tomado como capacidad de 16 caracteres.
- Si inicializa el generador de cadenas con cualquier contenido, la capacidad será la longitud del contenido + 16.
- Cuando agrega contenido nuevo al objeto del generador de cadenas, si la capacidad actual no es suficiente para tomar un nuevo valor, crecerá en (capacidad de la matriz anterior + 1) * 2.
Este análisis se toma a partir actual StringBuilder.java code
¿Por qué te importa la 'capacidad'? Crece automáticamente para acomodar lo que sea necesario. Puedes jugar con él para mejorar el rendimiento, pero sigue siendo asintóticamente lineal. – polygenelubricants
Hay preguntas acerca de la "capacidad" frente a la "longitud" en el examen OCA, por lo que para algunas personas el problema sí significa mucho. –