Porque ao olhar para o código -fonte de StringBuffer e StringBuilder, verificou -se que tanto herdou o abstringStringBuilder, e muitos métodos são métodos diretamente da classe dos pais AbstractStringBuilder, então decidi procurar o código -fonte do AbstractStringBuilder primeiro e depois procurar StringBuffer e Stringbuilder.
Localização: no pacote java.lang
Declaração: Resumo da classe AbstractStringBuilderImplements Anexlegáveis, Charsequence
A classe AbstractStringBuilder possui modificação abstrata, que mostra que ela não pode ser instanciada.
A classe AbstractStringBuilder possui duas subclasses: StringBuilder e StringBuffer.
Campos
/*** O valor é usado para armazenamento de caracteres. */ Char Value []; /*** A contagem é o número de caracteres usados. */ int contagem;
Construtor
1. Construtor sem parâmetros
AbstractStringBuilder () {}2. Ao criar um objeto da classe de implementação do AbstractStringBuilder, especifique o tamanho do buffer para a capacidade.
AbstractStringBuilder (INT Capacidade) {Value = new Char [Capacidade]; }Quando o Subclass StringBuilder ou StringBuffer é instanciado, esse construtor é chamado no construtor.
Expandir a capacidade
void expandCapacity(int minimumCapacity)
Esse método possui permissões de acesso ao pacote e vários métodos na classe chamarão esse método para expandir a capacidade quando a capacidade for insuficiente.
Código -fonte:
Void ExpandCapacity (int minimumCapacity) {int newCapacity = (value.length + 1) * 2; if (newCapacity <0) {newCapacity = Integer.max_value; } else if (MinimumCapacity> NewCapacity) {newCapacity = MinImumCapacity; } value = Arrays.copyof (valor, newcapacity); }Adicione o comprimento do buffer por 1 por 2 à variável NewCapacity, compare esse valor com o valor especificado e determine o valor maior como a nova capacidade do buffer; Em seguida, ligue para o método copyof da classe Matriz, que cria uma nova matriz e copie todos os caracteres da matriz original para a nova matriz.
EnsureCapacity (int MinimumCapacity)
vazio público EnsureCapacity (int MinimumCapacity)
Verifique se a capacidade é pelo menos igual ao valor mínimo especificado. Se a capacidade atual for menor que o valor especificado, uma nova matriz será criada e a capacidade da nova matriz será o dobro do valor especificado mais 2; Se a capacidade atual não for menor que o valor especificado, nenhum processamento será realizado diretamente.
Código -fonte:
public void EnsureCapacity (int minimumCapacity) {if (minimumCapacity> value.length) {expandcapacity (minimumumcapacity); }}teste:
StringBuffer S = new StringBuffer (); System.out.println ("Capacidade:" + s.Capacity ()); // Capacidade: 16 S.EnsureCapacity (10); System.out.println ("Capacidade:" + s.capacity ()); // Capacidade: 16 S.EnsureCapacity (30); System.out.println ("Capacidade:" + s.capacity ()); // Capacidade: 34 S.EnsureCapacity (80); System.out.println ("Capacidade:" + s.capacity ()); // Capacidade: 80método
O método CodePointat é implementado usando o caractere.CodePointAtImpl (valor, índice, contagem)
public int codePointat (int index) {if ((índice <0) || (index> = count)) {throw new stringIndexoutOfBoundSexception (index); } retornar caractere.codePointAtImpl (valor, índice, contagem); }O método getChars é implementado usando o método System.arraycopy ()
public void getchars (int srcbegin, int srcend, char [] dst, int dstbegin) {if (srcbegin <0) lança new stringIndexoutOfBoundSexception (srcbegin); if ((srcend <0) || (srcend> count)) lança new stringIndexoutOfBoundSexception (srcend); if (srcbegin> srcend) lança new stringIndexoutOfBoundSexception ("srcbegin> srcend"); System.ArrayCopy (Value, SrcBegin, DST, Dstbegin, Srcend - SrcBegin); }O método Apênd
public abstringStringBuilder Append (String str) {if (str == null) retorna appendNull (); int len = str.Length (); garantir o internal (contagem + len); str.getchars (0, len, valor, contagem); contagem += len; devolver isso; }Arrays.copyof () é usado para implementar
void expandcapacity (int minimumcapacity) {int newCapacity = value.length * 2 + 2; if (newCapacity - MiniMumCapacity <0) newCapacity = MinimumumCapacity; if (newCapacity <0) {if (minimumcapacidade <0) // Overflow lança novo outOfMemoryError (); newCapacity = Integer.max_value; } value = Arrays.copyof (valor, newcapacity); }Arrays.fill (valor, contagem, newLength, '/0'); Cópia entre strings
public void SetLength (int newLength) {if (newLength <0) lança new stringIndexoutOfBoundSexception (newLength); EnsureCapacityInternal (NewLength); if (count <newLength) {Arrays.fill (valor, count, newLength, '/0'); } count = newLength; }Delete () altera apenas o tamanho da string e não exclui realmente a string
public abstratestringbuilder delete (int start, int end) {if (start <0) lança new stringIndexouTofBoundSexception (start); if (end> count) end = count; if (start> final) lança new stringIndexoutOfBoundSexception (); int len = end - start; if (len> 0) {System.ArrayCopy (valor, start+len, valor, start, contagem-final); contagem -= len; } retornar isso; }Aprenda a usar flexivelmente o método System.arraycopy ()
Public AbstractStringBuilder Insert (Int Index, Char [] STR, Int Offset, Int Len) {if ((INDEX <0) || (Index> Length ())) Lança novo StringIndexoutOfBoundSexception (index); if ((deslocamento <0) || (len <0) || (offset> str.length - len)) lança novo stringIndexoutOfBoundSexception ("deslocamento" + deslocamento + ", len" + len + ", str.length" + str.Length); garantir o internal (contagem + len); System.arraycopy (valor, índice, valor, índice + len, contagem - índice); System.arrayCopy (STR, Offset, Value, Index, Len); contagem += len; devolver isso; }Resumir
O exposto acima é todo o conteúdo deste artigo sobre a interpretação detalhada do código -fonte do código -fonte da classe AbstractStringBuilder. Espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!