Embora a questão sobre strings Java "==" e "iguais" seja a questão mais básica no aprendizado de Java, ainda há muitos alunos que acabaram de aprender Java e não têm clareza sobre os princípios que discuti recentemente sobre esse assunto com meus amigos. , então escrevi um artigo para compartilhar com vocês meu próprio entendimento.
Primeiro vejamos um exemplo:
Copie o código do código da seguinte forma:
classe pública TestStringEquals {
public static void main(String[] args) {
String a = "teste";
String b = "teste";
String c = new String("teste");
String d = new String("teste");
Sequência e = uma;
Sequência f = nova Sequência(a);
String g = a + "";
System.out.println(a == b ? "expressão /"a==b/" é verdadeira"
: "expressão /"a==b/" é falsa");
System.out.println(a == c ? "expressão /"a==c/" é verdadeira"
: "expressão /"a==c/" é falsa");
System.out.println(c == d ? "expressão /"c==d/" é verdadeira"
: "expressão /"c==d/" é falsa");
System.out.println(a == e ? "expressão /"a==e/" é verdadeira"
: "expressão /"a==e/" é falsa");
System.out.println(a == f ? "expressão /"a==f/" é verdadeira"
: "expressão /"a==f/" é falsa");
System.out.println(a == g ? "expressão /"a==g/" é verdadeira"
: "expressão /"a==g/" é falsa");
if (a.equals(b) && b.equals(c) && c.equals(d) && d.equals(e)
&& e.equals(f) && f.equals(g)) {
Sistema.out
.println("a é igual a b é igual a c é igual a d é igual a e é igual a f é igual a g");
}
}
}
Se você ainda não tem a resposta, vamos tentar fazer. Você pode garantir que está tudo correto?
A resposta é anunciada abaixo:
Copie o código do código da seguinte forma:
expressão "a==b" é verdadeira
expressão "a==c" é falsa
expressão "c==d" é falsa
expressão "a==e" é verdadeira
expressão "a==f" é falsa
expressão "a==g" é falsa
<div style="text-align: left;"></div>a é igual a b é igual a c é igual a d é igual a e é igual a f é igual a g
Para entender bem esse tipo de problema, a melhor maneira é ter um conhecimento profundo do mecanismo e dos princípios do método "==" e do método "equals" de String em Java. Todos devem saber que "igual" é comparar o conteúdo das strings. Como todo o conteúdo das strings no programa acima é "teste", todos serão iguais quando comparados com iguais.
Mas você sabia que o método equals e o método "==" da classe base Object em Java são na verdade iguais? Só que depois que a classe String herda a classe Object (todas as classes em Java herdam a classe Object), ela sobrecarrega o método equal, tornando-o uma comparação do conteúdo da string.
Depois de ter uma boa compreensão de iguais, vamos agora estudar os meandros do método "==".
"==" é um operador em Java. O conteúdo que ele compara são os ponteiros de dois objetos, que é o endereço do objeto real. Portanto, é fácil entender que e==a retorna verdadeiro.
Vejamos a comparação entre c e d novamente. Quando vemos a palavra-chave new, significa que c e d foram reaplicados para um endereço de memória e, em seguida, atribuíram o valor "test", então c==d retorna falso. É compreensível da mesma maneira
A operação "==" entre a, c, d e f retorna falso.
Então vamos dar uma olhada em g = a + “”. Embora não vejamos a palavra-chave new, como o operador “+” da classe String está sobrecarregado, uma nova String será definitivamente adicionada ao método sobrecarregado, então se torna o acima. situação. Então a coisa mais difícil de entender é a comparação entre a e b. Na verdade, este é o resultado da otimização do compilador Java. O compilador Java possui uma área de armazenamento chamada pool de constantes de string. Depois que a instrução for compilada, "test" será armazenado neste conjunto de constantes de string. Então, quando b for definido novamente, b ainda aponta para esta área, então a e b ainda apontam para a mesma área. Então a==b retorna verdadeiro.