Spec-Zone.ru › Kotlin 1.8

Равенство

В Kotlin есть два типа равенства:

  • Структурное равенство (== - проверка на equals())

  • Ссылочное равенство (=== - две ссылки указывают на один и тот же объект)

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

Структурное равенство проверяется операцией == и её отрицанием !=. По соглашению выражение, подобное a == b, преобразуется в:

a?.equals(b) ?: (b === null)

Если a не null, вызывается функция equals(Any?), в противном случае (a равно null) проверяется, что b ссылочно равно null.

Обратите внимание, что нет смысла оптимизировать ваш код при явном сравнении с null: a == null будет автоматически переведено в a === null.

Для реализации пользовательской проверки на равенство переопределите функцию equals(other: Any?): Boolean. Функции с тем же именем и другими сигнатурами, например equals(other: Foo), не влияют на проверки равенства с помощью операторов == и !=.

Структурное равенство никак не связано с сравнением, определённым интерфейсом Comparable<...>, поэтому только пользовательская реализация equals(Any?) может повлиять на поведение оператора.

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

Ссылочное равенство проверяется операцией === и её отрицанием !==. a === b истинно тогда и только тогда, когда a и b указывают на один и тот же объект. Для значений, представленных примитивными типами во время выполнения (например, Int), проверка на === равенство эквивалентна проверке на == равенство.

Равенство чисел с плавающей точкой

Когда операнды проверки на равенство статически известны как Float или Double (имеющие или не имеющие значение null), проверка соответствует Стандарту IEEE 754 для арифметики чисел с плавающей точкой.

В противном случае используется структурное равенство, что расходится со стандартом, поэтому NaN равно самому себе, NaN считается больше любого другого элемента, включая POSITIVE_INFINITY, и -0.0 не равно 0.0.

См.: Сравнение чисел с плавающей точкой.

Последнее изменение: 10 января 2023
Безопасность при работе с null Выражения this

© 2010–2023 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/equality.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API