Explicação detalhada de String em Java

String detalhada em Java
String: Conjunto de constantes de string

Perguntas da entrevista (veja o vídeo da estação b)

1. Não posso usar volatile com String?

2. Por que existem essas duas maneiras? Por causa de suas diferentes áreas de armazenamento

3. A camada inferior da String é uma matriz do tipo char

1. Três características da corda

1.1. Imutabilidade

1.1.1. String é um objeto em modo imutável. A principal função do modo invariável é garantir a consistência dos dados quando um objeto precisa ser compartilhado por vários threads e acessado com frequência.

1.2, otimização de pool constante

1.2.1 Após a criação do objeto String, ele será armazenado em cache no pool de constantes da string e a referência em cache será retornada diretamente quando o mesmo objeto for criado na próxima vez.

1,3 、 final

1.3.1. A classe String não pode ser herdada, o que melhora a segurança do sistema.

2. Existem três maneiras de instanciar String ():

2.1, atribuição direta

2.2. Por meio do construtor, o valor da string pode ser passado diretamente, ou um array char pode ser passado.

2.3. Por meio do construtor, você pode passar diretamente uma matriz do tipo char

A diferença entre os dois (área de armazenamento): a atribuição direta é armazenada no conjunto de constantes da string e, ao construir uma instância, é armazenada no heap.

3. Resumo dos sites de teste de entrevista

3.1, String não é um tipo de dados básico

A camada inferior da String é na verdade uma matriz do tipo char

3.2, a instanciação de String

3.3, método igual

public boolean equals(Object anObject) {
    
        
if (this == anObject) {
    
           
    return true;   
 }   
 if (anObject instanceof String) {
    
          
   String aString = (String)anObject;      
     if (coder() == aString.coder()) {
    
             
        return isLatin1() ? StringLatin1.equals(value, aString.value) : 			           					  
                            StringUTF16.equals(value, aString.value);       
    }    }   
     return false; 
     }

3.3.1. O método equals em Object é o mesmo que "==".

3.3.2. String reescreve o método igual em Object. A comparação não é mais o valor do endereço, mas seu valor ().

3.4, String é imutável

3.4.1. Enquanto o valor de String é alterado, ele se torna um novo objeto

3.5, método intern ()

3.5.1. Quando o objeto String chama o método intern (), ele irá para o pool de constantes de string para encontrar o valor; se o valor existir, uma referência ao valor será retornada; se ele não existir, um novo um será criado no valor e retorno de endereço do pool de constantes de string.

Quatro métodos comumente usados

Insira a descrição da imagem aqui

4.1, corte de corda

4.1.1, o método split () suporta expressões regulares

Cinco, entrevistar perguntas clássicas

5.1 Qual é a diferença entre == e iguais?

5.1.1. "==" é comparado a partir da classificação do tipo de dados, se o tipo de dados básico é comparado, é o valor de comparação; se o tipo de dados de referência é comparado, é o valor do endereço na memória.

5.1.2, equals é o método fornecido por Object e "==" é o mesmo, mas String o reescreve e compara seu valor, não o valor do endereço na memória.

5.2. O resultado da execução do seguinte código é:

String str1 = "Hello World"; 
String str2 = "Hello"; 
str2 += " World"; 
System.out.println(str1 == str2);

Você pode usar o comando javap -c xx.class para ver a ordem de execução.No processo, há um novo StringBuilder (); método append, então str2 aparece no heap e o resultado é falso;

Insira a descrição da imagem aqui

5.3. O resultado da execução do seguinte código é:

        String str1 = "Hello World";
        final String str2 = " World";
        String str3 = "Hello" + str2;
        System.out.println(str1 == str3);

Se o resultado for verdadeiro, a modificação final será diretamente compilada em um valor explícito e a modificação final não será compilada em um valor explícito.
Referência: a diferença entre variáveis ​​String modificadas finais e variáveis ​​String não modificadas em java

5.4. O resultado da execução do seguinte código é:

String str1 = "Hello World"; 
final String str2 = new String(" World"); 
String str3 = "Hello"+str2; 
System.out.println(str1 == str3);

Se o resultado for falso, ele é modificado por final, mas foi criado primeiro na memória heap, então, não importa se foi modificado por final ou não, ele está sempre na memória heap.

Insira a descrição da imagem aqui

5.5. O resultado da execução do seguinte código é:

        String str1 = "Hello World";
        String str2 = "Hello";
        String str3 = " World";
        String str4 = str2 + str3;
        System.out.println(str4 == str1);
        System.out.println(str4.intern() == str1);

O resultado é: falso, verdadeiro. Porque o método intern (); de String procura primeiro pelo pool de constantes de string, retorna a referência se houver uma e a cria no pool de constantes se não houver.

5.6, o papel do pool constante de string

Vários valores idênticos podem compartilhar um valor de endereço. Pode reduzir o consumo de memória.

5.7. O thread da String é seguro?

Sim, o valor é imutável, desde que o valor mude, é um novo valor de endereço.

5.8. Quais são as vantagens de usar String como chave ao usar HashMap?

Como o HashMap encontra o valor de acordo com o hashcode da chave, a String é armazenada em cache quando é criada. Portanto, no HashMap, não há necessidade de calcular o hashcode, ele está no cache e a eficiência é maior do que em outros objetos.

Acho que você gosta

Origin blog.csdn.net/weixin_43983411/article/details/108569701
Recomendado
Clasificación