Найти в Дзене

Разница между операторами «==» и «===» в Kotlin

1. Обзор В этой статье мы поговорим о разнице между операторами «==» и «===» в Kotlin . В Котлине, как и в Java, есть две разные концепции равенства: ссылочное равенство и структурное равенство. 2. Ссылочное равенство Для ссылочного равенства мы используем символ === , который позволяет нам оценить ссылку на объект (если она указывает на тот же объект). Это эквивалент оператора «==» в Java. Допустим, у нас определены два целых числа: val a = Integer(10)
val b = Integer(10) и мы проверяем их оба, выполнив a === b , который вернет false , поскольку это два отдельных объекта, каждый из которых указывает на разные места в памяти. 3. Структурное равенство Теперь для структурного равенства мы используем символ == , который определяет, являются ли оба значения одинаковыми (или равными). Обычно это достигается путем реализации методаquals() в Java. Итак, используя тот же пример с целыми числами , нам просто нужно сделать a == b , и в этом случае он вернет true , поскольку обе переменные им
Оглавление

1. Обзор

В этой статье мы поговорим о разнице между операторами «==» и «===» в Kotlin .

В Котлине, как и в Java, есть две разные концепции равенства: ссылочное равенство и структурное равенство.

2. Ссылочное равенство

Для ссылочного равенства мы используем символ === , который позволяет нам оценить ссылку на объект (если она указывает на тот же объект). Это эквивалент оператора «==» в Java.

Допустим, у нас определены два целых числа:

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

и мы проверяем их оба, выполнив a === b , который вернет false , поскольку это два отдельных объекта, каждый из которых указывает на разные места в памяти.

3. Структурное равенство

Теперь для структурного равенства мы используем символ == , который определяет, являются ли оба значения одинаковыми (или равными). Обычно это достигается путем реализации методаquals() в Java.

Итак, используя тот же пример с целыми числами , нам просто нужно сделать a == b , и в этом случае он вернет true , поскольку обе переменные имеют одинаковое значение.

4. Сравнение сложных объектов

Если мы хотим проверить равенство более сложных объектов, символы будут вести себя одинаково. Допустим, у нас есть Пользователь , у которого есть список хобби:

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

=== проверит равенство ссылок, и с помощью удобного использования List<> мы можем воспользоваться преимуществами оператора == , который проверит объект и данные, содержащиеся в списке.

5. Равенство массивов

Для массивов, начиная с Kotlin 1.1, мы можем проверять структурное равенство с помощью инфиксных функций contentEquals и contentDeepEquals:

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

assertTrue(hobbies contentEquals hobbies2)

6. Заключение

Это краткое руководство продемонстрировало разницу между ссылочным и структурным равенством в Kotlin на очень простом примере.

Оригинал статьи: https://www.baeldung.com/kotlin/equality-operators