Comparar Strings no Java com o operador ==
Por: Marco R.
04 de Setembro de 2020

Comparar Strings no Java com o operador ==

Computação Geral Java Introdução a computação

Muitos iniciantes em Java frequentemente se esquecem que uma string em particular não é um tipo primitivo de dado, tal como int ou char, mas sim um objeto, ou seja, não se pode utilizar o operador == para comparar objetos. A classe Object, que é a classe raiz da hierarquia de classes em Java, oferece o método equals(Object obj) que retorna um valor booleano true, se o objeto que invoca tal função for igual ao outro passado como parâmetro dessa função, ou false caso contrário. O operador == entre objetos apenas checa se suas referências são iguais, mas não seus conteúdos.

String s1 = new String("banana");

String s2 = new String("banana"); 

//Bloco 1

System.out.println(s1.equals(s2));  //true 

//Bloco 2
System.out.println(s1 == s2);   //false

O resultado da comparação do "Bloco 1" acima, utilizando a função equals, é true. E do "Bloco 2" é false, apesar de s1 s2 serem objetos do tipo String, com o mesmo conteúdo, eles possuem endereços diferentes na memória. Mas se modificarmos a criação das strings, sem utilizar o operador new, o resultado será true em ambos os casos.

String s3 = "abacaxi";

String s4 = "abacaxi";

//Bloco 1

System.out.println(s3.equals(s4));  //true		

//Bloco 2
System.out.println(s3 == s4);   //true

Quando criamos strings literais, usando apenas aspas duplas, o conteúdo delas vão para um pool de strings, conforme figura abaixo.

Não foi fornecido texto alternativo para esta imagem

Então s3 s4 estão se referindo ao mesmo objeto dentro do pool de strings, por isso s3 == s4 retorna true. E quando o objeto string é criado utilizando operador new, um espaço na memória heap do Java é alocado exclusivamente para aquele objeto, portanto s1 == s2 retorna false nesta situação. O mecanismo de pool de strings auxilia na economia de espaço em memória para o ambiente Java Runtime, embora normalmente leve mais tempo para criar a string. O aconselhável é utilizar o método equals quando quisermos comparar os valores de duas strings para saber se são iguais ou não.

Cadastre-se ou faça o login para comentar nessa publicação.

Confira artigos similares

Confira mais artigos sobre educação

+ ver todos os artigos

Encontre um professor particular

Busque, encontre e converse gratuitamente com professores particulares de todo o Brasil