Classes comumente usadas (1) String

1. As características da corda

Classe String : representa uma string

String é uma classe final que representa uma sequência imutável de caracteres . Não herdável

O conteúdo de caracteres do objeto String é armazenado em um valor de matriz de caracteres []

No código-fonte, você pode ver que a classe String implementa as interfaces Serializable, Comparable e CharSequence. Comparable é implementado para indicar que String pode ser comparada em tamanho e CharSequence é implementada para indicar que String pode operar em uma série de caracteres métodos. Todas as interfaces CharSequence são alguns métodos.

Entre eles, o valor da matriz [] também é final. Após a atribuição da matriz, seu endereço não pode ser modificado porque foi finalizado. A matriz não pode ser reatribuída, nem o valor do elemento pode ser modificado , indicando que a String não é Uma sequência de caracteres que pode ser alterada.

Por que String é imutável?

Demonstração e análise simples de código:

import org.junit.Test;

public class StringMain {
    @Test
    public void test01(){
        String str1 = "123";
        String str2 = "123";
        str1="hello";
        System.out.println(str1==str2);
    }
}

Resultado: verdadeiro

Análise: a área do método contém um pool de constantes de string. Em jdk diferente, a divisão é diferente e a última está no heap.

Atribua um valor a uma string literalmente. Neste momento, o valor da string será declarado no pool de constantes de string  e não haverá strings com o mesmo conteúdo no pool de constantes de string.

Como nossa String é salva com o valor final [], agora str1 recebeu o valor 123. Estamos atribuindo o valor hello a str1. Em vez de modificar diretamente o 123 do pool constante, recriamos um hello one. Não há direita Modifique o valor anterior (123)

Portanto, reflita a imutabilidade:

1. Ao reatribuir uma string, é necessário reatribuir a área de memória para atribuição, e o valor original não pode ser usado para atribuição

2. Ao concatenar uma string existente, você também precisa especificar novamente a área de memória para atribuição e não pode usar o valor original para atribuição

3. Quando você modifica o caractere ao chamar replace (), você também precisa especificar novamente a atribuição da área de memória, você não pode usar o valor original para atribuição

Se você tiver alguma dúvida, pode verificar o endereço de str1:

import org.junit.Test;

public class StringMain {
    @Test
    public void test01(){
        String str1 = "123";
        System.out.println(System.identityHashCode(str1));
        String str2 = "123";
        str1="hello";
        System.out.println(System.identityHashCode(str1));
        System.out.println(str1==str2);
        final int []value;
    }
}

Conteúdo de saída:

1456208737
288665596
falso

Criação de objeto String

Veja a captura de tela da criação do objeto String do código-fonte:

Qual é a diferença entre String str1 = "abc" e String str2 = new String ("abc")?

Primeiro, olhe para o código-fonte de newString (str):

 @HotSpotIntrinsicCandidate
    public String(String original) {
        this.value = original.value;
        this.coder = original.coder;
        this.hash = original.hash;
    }

Uma vez que o objeto é criado pelo novo método, é para abrir espaço no heap. Os diagramas dos dois são:

Se não houver ninguém no pool constante, um será recriado e os outros não serão modificados.

Olhe para a pergunta verdadeiro / falso novamente: anexe um diagrama para explicar

Resumo :

1. O resultado do splicing da constante e a constante está no pool constante. E não haverá constantes com o mesmo conteúdo no pool constante

2. Contanto que um deles seja uma variável, o resultado está no heap

3. Se o resultado do splicing chamar o método intern (), o valor de retorno está no pool constante

2. Métodos comumente usados ​​de string

Protótipo de método Função de significado
comprimento interno () Retorna o comprimento da string
char charAt (índice int) Retorna o caractere em um índice
boolean isEmpty () Determine se é uma string vazia
String toLowerCase () Converta todos os caracteres em String para minúsculas
String toUpperCase () Converter todos os caracteres em String em maiúsculas
Corte da corda () Retorna uma cópia da string, ignorando os espaços em branco à esquerda e à direita
boolean equals (Object obj) : Compare se o conteúdo da string é o mesmo
boolean equalsIgnoreCase (String anotherString) Semelhante ao método equals , ignorando maiúsculas e minúsculas
String concat (String str) Concatene a string especificada ao final desta string. Equivalente a usar "+"
int compareTo (String anotherString) Compare o tamanho de duas strings
String substring (int beginIndex) Retorna uma nova string, que é uma substring dessa string que é interceptada de beginIndex até o final.
String substring (int beginIndex, int endIndex) Retorne uma nova string, que é uma substring desta string de beginIndex a endIndex (não incluído)
boolean endsWith (sufixo de string) Teste se esta string termina com o sufixo especificado
boolean startsWith (prefixo de string) Teste se esta string começa com o prefixo especificado
boolean startsWith (prefixo de string, int toffset) Testa se a substring desta string a partir do índice especificado começa com o prefixo especificado
booleano contém (CharSequence s) Retorna verdadeiro se e somente se esta string contém a seqüência especificada de valores char
int indexOf (String str) Retorna o índice da primeira ocorrência da substring especificada nesta string
int indexOf (String str, int fromIndex) Retorna o índice da primeira ocorrência da substring especificada nesta string, começando com o índice especificado
int lastIndexOf (String str) Retorna o índice da ocorrência mais à direita da substring especificada nesta string
int lastIndexOf (String str, int fromIndex) Retorna o índice da última ocorrência da substring especificada nesta string, pesquisando para trás a partir do índice especificado
Substituição de string (char oldChar, char newChar) Retorne uma nova string, que é obtida substituindo todas as ocorrências oldChar nesta string por newChar
String replaceAll (string regex, substituição de string) Use a substituição fornecida para substituir todas as substrings desta string que correspondem à expressão regular fornecida.
correspondências booleanas (String regex) Diga se esta string corresponde à expressão regular fornecida.
String [] split (String regex) Divida esta string de acordo com a correspondência da expressão regular fornecida

Os métodos indexOf e lastIndexOf retornam -1 se não forem encontrados 

3. Conversão de string e tipo de dados básicos

     1, a string nos  tipos de dados básicos, embalagem

      1) O público estático int parseInt (String s ) da classe de invólucro Integer : Ele pode converter uma string composta de caracteres "digitais" em um inteiro.

     2) Da mesma forma, use as classes Byte, Short, Long, Float e Double no pacote java.lang para ajustar os métodos de classe correspondentes para converter a string composta de caracteres "digitais" no tipo de dados básico correspondente

     2, os tipos de dados básicos e embalagem em uma string

调用String类的public String valueOf(int n)将int型转换为字符串 valueOf(byte b)、valueOf(long l)、valueOf(float f)、valueOf(double d)、valueOf(boolean b)可由参数的相应类型到字符串的转换。

     3、字符数组 转为 字符串

String 类的构造器:String(char[]) 和 String(char[],int offset,int length) 分别用字符数组中的全部字符和部分字符创建字符串对象

     4、字符串 转为 字符数组

public char[] toCharArray():将字符串中的全部字符存放在一个字符数组 中的方法

Acho que você gosta

Origin blog.csdn.net/weixin_43725517/article/details/112794014
Recomendado
Clasificación