Cercherò di spiegarlo con qualche esempio.
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 lunghezza della sequenza di caratteri nel generatore di poiché questo StringBuilder non contiene alcun contenuto, la sua lunghezza sarà 0.
capacity()
- il numero di spazi di carattere che sono stati stanziati . Quando si tenta di costruire un generatore di stringhe con contenuto vuoto, per impostazione predefinita prende la dimensione di inizializzazione come lunghezza + 16, che è 0 + 16. quindi la capacità tornerebbe 16 qui.
Nota: la capacità, che viene restituita dal metodo capacity(), è sempre maggiore o uguale alla lunghezza (solitamente maggiore di) e si espanderà automaticamente secondo necessità per adattarsi al generatore di stringhe.
La logica dietro la funzione di capacità:
- Se non si inizializza StringBuilder con qualsiasi contenuto, la capacità di default sarà preso come capacità di 16 caratteri.
- Se si inizializza il generatore di stringhe con qualsiasi contenuto, la capacità sarà la lunghezza del contenuto + 16.
- Quando si aggiunge nuovo contenuto all'oggetto stringbuilder, se la capacità corrente non è sufficiente per acquisire un nuovo valore, allora crescerà di (capacità dell'array precedente + 1) * 2.
Questa analisi è prendere da actual StringBuilder.java code
Perché ti interessa la "capacità"? Cresce automaticamente per soddisfare qualsiasi cosa sia necessaria. Puoi giocare con esso per migliorare le prestazioni, ma è ancora asintoticamente lineare. – polygenelubricants
Ci sono domande su 'capacity' vs.' length' nell'esame OCA, quindi per alcune persone il problema ha un significato. –