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():将字符串中的全部字符存放在一个字符数组 中的方法