Diferença entre os operadores "==" e "===" no Kotlin

Diferença entre os operadores "==" e "===" no Kotlin

1. Visão geral

Neste artigo, vamos falar sobredifference between “==” and “===” operators in Kotlin.

Em Kotlin, assim como em Java, temos dois conceitos diferentes de igualdade,Referential equality eStructural equality.

2. Igualdade Referencial

Para igualdade referencial, usamos o símbolo=== que nos permite avaliar a referência de um objeto (se estiver apontando para o mesmo objeto). Isso é equivalente ao operador "==" em Java.

Digamos que temos dois inteiros definidos:

val a = Integer(10)
val b = Integer(10)

e verificamos ambos fazendoa === b, que retornaráfalse porque são dois objetos separados, cada um apontando para um local diferente na memória.

3. Igualdade Estrutural

Agora, para igualdade estrutural, usamos o símbolo== que avalia se os dois valores são iguais (ou iguais). Isso geralmente é obtido implementando o métodoequals() em Java.

Então, usando o mesmo exemplo deIntegers, precisamos apenas fazera == b, e neste caso, ele retornarátrue, já que ambas as variáveis ​​têm o mesmo valor.

4. Comparando objetos complexos

Se quisermos verificar a igualdade em objetos mais complexos, os símbolos se comportarão da mesma maneira. Digamos que temos umUser, que contém uma lista de hobbies:

data class User(val name: String, val age: Int, val hobbies: List)

O=== verificará a igualdade de referência e, convenientemente usando umList<>, podemos tirar vantagem do operador==, que verificará o objetoand the data contained on the list.

5. Igualdade de matrizes

ParaArrays, a partir do Kotlin 1.1, podemos verificar a igualdade estrutural usando as funçõesinfixcontentEqualsecontentDeepEquals:

val hobbies = arrayOf("Hiking, Chess")
val hobbies2 = arrayOf("Hiking, Chess")

assertTrue(hobbies contentEquals hobbies2)

6. Conclusão

Este rápido tutorial mostrou a diferença entrereferential and structural equality in Kotlin, por meio de um exemplo bem simples.

Como sempre, a implementação de todos esses exemplos e snippets pode ser encontradaover on GitHub.

Observe que este é um projeto baseado em Maven, portanto, deve ser fácil importar e executar como está.