¡GoConqr estrena diseño! Cuéntanos qué te parece.

Apuntes

3.2 - Teste de igualdade entre Strings e outros objetos

Luis Felipe Guariento Desenvolvimento de Software Concursos Públicos Portugués 9 páginas

O operador == compara objetos, incluindo Strings, por referência, implicando que um teste de igualdade irá avaliar para…

Contenido del apunte (9)

Página 1

Pool de Constant String

Entender como Strings são comparadas na LP Java.

String Constant Pool corresponde a uma área na memória heap contendo objetos String.

Strings criadas utilizando literais String são retornadas a partir do pool de constantes String, enquanto Strings criadas utilizando-se o operador new não serão retornadas a partir do pool de constantes String.

Quando se cria uma String utilizando literais, um objeto String será criado no pool e retornado. Caso um objeto do mesmo valor já exista nesse pool, será retornado sem que necessite ser recriado. Caso contrário, quando uma String é criada utilizando o operador new, será criado na memória heap, fora do pool de constantes String.

Página 2

Comparação de objetos utilizando o operador == "equal"

O operador == compara objetos, incluindo Strings, por referência, implicando que um teste de igualdade irá avaliar para true somente se dois objetos na comparação forem os mesmos.

Exemplo:

O operador == compara objetos, incluindo Strings, por referência, implicando que um teste de igualdade irá avaliar para…

Observando o exemplo acima, temos que string2 e string3 referenciam o mesmo objeto String no pool de constantes String. Por outro lado, o objeto String referenciado pela variável string1 será criado fora do pool de constantes String pela utilização do operador new.

Isso quer dizer que as variáveis string1 e string2 se referem a objetos diferentes enquanto as variáveis string2 e string3 se referem ao mesmo objeto.

Página 3

Comparação de objetos utilizando o método equals

O método equals é definido na classe Object, comparando objetos baseados em como esse método é sobrescrito no código da classe Caso o método equals não seja sobrescrito na classe em questão, a comparação se dará da mesma maneira como é realizada pelo operador ==

Exemplo: comparação de objetos através da sobrescrita do método equals herdado:

O método equals é definido na classe Object, comparando objetos baseados em como esse método é sobrescrito no código da…

O código acima utiliza o método equals definido na classe Object, que é herdado pela classe Data criada mas não é sobrescrito pela mesma.

As variáveis data1 e data2 se referem a objetos diferentes, então a comparação apenas pelo método equals herdado de Object resultará em false, mesmo que o valor do campo value seja o mesmo.

Página 4

Comparação de objetos utilizando o método equals

Comparação de objetos utilizando o método equals

O exemplo acima é similar ao anterior, exceto pelo fato de que dessa vez o método equals é sobrescrito na classe Data.

O método equals sobrescrito aqui irá comparar objetos Data baseados no valor do campo value.

Assim, no código acima as variáveis data1 e data2 referenciam diferentes objetos, mas seus valores do campo value serão o mesmo.

Como resultado e conforme a redefinição do equals, a comparação com equals retornará true.

Página 5

Comparação de Strings utilizando o método equals

O método equals é sobrescrito na classe String, comparando-se duas Strings baseando-se no valor literal contido nelas.

A comparação com o método equals avaliará para true se as duas Strings contiverem o mesmo conteúdo e false caso contrário.

O método equals é sobrescrito na classe String, comparando-se duas Strings baseando-se no valor literal contido nelas. A…

No código acima, as variáveis string1, string2 e string3 referenciam objetos diferentes, mas todos contém o mesmo valor. Então a saída de cada comparação retornará true.

Página 6

Questões

Questões

No código acima e devido ao fato que o operador de comparação == compara duas variáveis baseando-se na posição em memória ao qual as variáveis referenciam. Temos que o operador new criará duas Strings em duas diferentes posições de memória no heap e portanto a comparação resultara em false, pois as variáveis string1 e string2 referenciam duas diferentes posições de memória apesar de terem o mesmo valor.

Página 7

Questões

Questões

O método equals é sobrescrito na classe String e irá comparar duas Strings baseadas em seu conteúdo real e não na sua posição em memória. Entretanto Java é case sensitive o que quer dizer que "OCAJP 8" é diferente de "ocajp 8".

Então essa comparação resultará em false.

Página 8

Questões

Questões

No código acima, utiliza-se o método equals para comparar dois objetos do tipo Data, que são data1 e data3. Entretanto o método equals não é sobrescrito em Data, o que quer dizer que mesmo com equals a comparação se dará baseando-se no valor em memória e não no conteúdo do campo value criado em Data.

No cenário acima, a variável data3 referencia o objeto criado na sentença "Data data2 = new Data(0)". Enquanto que data1 aponta para outro objeto criado em "Data data1 = new Data(0)".

Esses objetos serão portanto, independentes e considerando o fato que o método equals não é sobrescrito na classe Data, a sentença de comparação irá imprimir B.false

Página 9

Questões

Questões

O método equals foi sobrescrito em Data e retornará true caso o valor armazenado em value for maior que zero false caso contrário.

Definimos valor 0 para os dois objetos Data criados, o que quer dizer que a comparação resultará em false.

Atentar que o método equals irá comparar objetos baseando-se em sua sobrescrita na classe do objeto e não nos valores de seus campos.

Información

Descripción
Concursos Públicos (OCAJP 8 Online Course) Desenvolvimento de Software Apunte sobre 3.2 - Teste de igualdade entre Strings e outros objetos, creado por Luis Felipe Guariento el 24/07/2019.
Visitas
1
Valoración

Más sobre Variáveis e tipos de dados em Java

Escríbenos

¿Sobre qué es tu mensaje?

¿Qué te parece el nuevo diseño?

¿Te gusta?