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á.