Duas maneiras de criar String e pool constante em Java

Duas maneiras de criar String

1. Criação constante:

String str1 = "abcd";

Quando criamos uma constante de string, a JVM primeiro verifica o pool de constantes de string.Se a string já existir no pool de constantes, ela retornará diretamente a referência de instância no pool de constantes. Se a string não existir no pool constante, a string será instanciada e colocada no pool constante. Devido à imutabilidade das strings String, podemos ter certeza de que não deve haver duas strings idênticas no pool constante.

A linha de código acima pode ser entendida como: verifique o pool de constantes de string ali "abcd", o pool de constantes de string se não, crie um e, em seguida, str1aponte para o pool de constantes de string do objeto. Se for assim, vá direto ao str1ponto "abcd";

2. Criação de objeto:

String str2 = new String("abcd");//堆中创建一个新的对象
String str3 = new String("abcd");//堆中创建一个新的对象

Esta forma de criação é igual à forma de criação de um objeto.O objeto criado é armazenado na pilha e aponta para a pilha. Portanto, str2e str3endereço de memória na pilha, o ponto de pilha “abcd”, e os str1endereços de memória aponta para um conjunto de cadeia constante.

Esses dois métodos de criação diferentes são diferentes:

  1. A primeira maneira é obter objetos no pool constante;
  2. A segunda maneira é criar um novo objeto diretamente no espaço de memória heap.
System.out.println(str1==str2);//false
System.out.println(str2==str3);//false

Lembre-se de uma coisa: contanto que você o use new, você precisa criar um novo objeto.

Outra imagem deve ser mais fácil de classificar (fonte da imagem: https://www.journaldev.com/797/what-is-java-string-pool )

Insira a descrição da imagem aqui

 
 

Conjunto de constantes de string

O pool constante do tipo String é especial. Existem duas maneiras principais de usá-lo:

  1. Objetos de string declarados diretamente com aspas duplas serão armazenados diretamente no pool de constantes.
  2. Objeto String, se não for declarado entre aspas duplas, String pode ser usado para fornecer o internmétodo.

Suplemento: String.intern ()

String.intern()É um método nativo. Sua função é:

  1. Se o pool de constantes de tempo de execução já contém uma string igual ao conteúdo deste objeto String, uma referência à string no pool de constantes será retornada;
  2. Caso contrário, o método de processamento antes de JDK1.7 (não incluindo 1.7) é criar uma string com o mesmo conteúdo que esta String no pool constante e retornar uma referência à string criada no pool constante. O método de processamento para JDK1.7 e posterior é registrar a referência desta string no pool de constantes e retornar a referência.
String s1 = new String("计算机");
String s2 = s1.intern();
String s3 = "计算机";
System.out.println(s2);//计算机
System.out.println(s1 == s2);//false,因为一个是堆内存中的 String 对象一个是常量池中的 String 对象,
System.out.println(s3 == s2);//true,因为两个都是常量池中的 String 对象

 

Adicione um pequeno ponto de conhecimento: a emenda de cordas:

String str1 = "str";
String str2 = "ing";
		 
String str3 = "str" + "ing";//常量池中的对象
String str4 = str1 + str2; //在堆上创建的新的对象	  
String str5 = "string";//常量池中的对象

System.out.println(str3 == str4);//false
System.out.println(str3 == str5);//true
System.out.println(str4 == str5);//false

Tente evitar a concatenação de várias strings, pois isso recriará o objeto. Se você precisar alterar a string, pode usar StringBuilder ou StringBuffer.
 
 
ps: se você quiser aprender sobre 8 tipos básicos de classes de empacotamento e pools constantes, pode consultar outro blog meu:
https://blog.csdn.net/weixin_43901865/article/details/112566955

Acho que você gosta

Origin blog.csdn.net/weixin_43901865/article/details/112782233
Recomendado
Clasificación