[Программирование, Kotlin] Проверка на равенство в Kotlin (перевод)

Автор Сообщение
news_bot ®

Стаж: 6 лет 4 месяца
Сообщений: 27286

Создавать темы news_bot ® написал(а)
10-Дек-2020 14:31
Для будущих учащихся на курсе "Kotlin Backend Developer" подготовили перевод полезного материала.
Также приглашаем посмотреть открытый урок по теме
"Kotlin multiplatform: Front/Back на одном языке".
В языке Kotlin существует три способа проверки на равенство:Первый способ — сравнение структур (==)Оператор == в Kotlin позволяет сравнивать данные, содержащиеся в переменных. Однако в Java этот оператор используется для сравнения ссылок двух переменных.В случае пользовательских классов == можно использовать для сравнения содержимого data-классов. В остальных случаях этот оператор сравнивает ссылки.Второй способ — сравнение ссылок (===)Оператор === в Kotlin используется для сравнения ссылок двух переменных. Однако в случае примитивов === является эквивалентом ==, то есть выполняет проверку значений.Третий способ — метод equalsМетод equals выполняет в Kotlin ту же функцию, что и ==.Однако между методом equals и оператором == возникает разница в случае сравнения переменных типа Float и Double. Если при сравнении переменных типа Float и Double с помощью == применяется стандарт IEEE 754, то в случае с equals это не так, поэтому при использовании equals считается, что:
  • NaN равен самому себе;
  • NaN больше, чем любой другой элемент, включая POSITIVE_INFINITY;
  • 0,0 меньше, чем 0,0.
Рассмотрим примеры ниже, чтобы лучше понять, как происходит сравнение в разных случаях.1. Сравнение примитивов
val firstInt = 5
val secondInt = 5
println(firstInt == secondInt)  // true
println(firstInt === secondInt) // true
println(firstInt.equals(secondInt)) // true
В случае примитивных типов данных сравниваются содержащиеся в них значения.2. Сравнение примитивов в обертке
val firstInt = Integer(5)
val secondInt = Integer(5)
println(firstInt == secondInt)  // true
println(firstInt === secondInt) // false
println(firstInt.equals(secondInt)) // true
Здесь firstInt и secondInt имеют разные ссылки. Поэтому сравнение ссылок (===) возвращает результат false. При проверке равенства структуры и использовании метода equals проверяется только содержимое. Следовательно, результатом проверки будет true, поскольку значение обеих переменных равно 5.3. Сравнение объектов пользовательских классов
class Student(val name : String)
val student1 = Student(“Jasmeet”)
val student2 = Student(“Jasmeet”)
println(student1 === student2) // false
println(student1 == student2) // false
println(student1.equals(student2)) // false
println(student1.name === student2.name) // true
println(student1.name == student2.name) // true
println(student1.name.equals(student2.name)) // true
В данном случае student не является ни примитивом, ни оберткой, поэтому во всех случаях сравниваются ссылки, а не содержимое. Однако при сравнении строковых литералов содержимое сравнивается так же, как и в Java.Чтобы сравнение содержимого работало, нужно иметь дело с data-классом.
data class Student(val name : String)
val student1 = Student(“Jasmeet”)
val student2 = Student(“Jasmeet”)
println(student1 === student2) // false
println(student1 == student2) // true
println(student1.equals(student2)) // true
4. Сравнение отрицательного и положительного нуля
val negativeZero = -0.0f
val positiveZero = 0.0f
println(negativeZero == positiveZero) // true
println(negativeZero.equals(positiveZero)) // false
Как уже упоминалось, при сравнении отрицательного нуля и положительного нуля с использованием оператора == применяется стандарт IEEE 754. В результате возвращается значение true. При использовании же метода equals этот стандарт не применяется, поэтому возвращается значение false.Использованные материалы: https://kotlinlang.org/docs/reference/equality.html
Узнать подробнее о курсе "Kotlin Backend Developer".Посмотреть открытый урок по теме "Kotlin multiplatform: Front/Back на одном языке".

ЗАБРАТЬ СКИДКУ
===========
Источник:
habr.com
===========

===========
Автор оригинала: Jasmeet Kaur
===========
Похожие новости: Теги для поиска: #_programmirovanie (Программирование), #_kotlin, #_kotlin, #_backend, #_blog_kompanii_otus._onlajnobrazovanie (
Блог компании OTUS. Онлайн-образование
)
, #_programmirovanie (
Программирование
)
, #_kotlin
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 07-Июл 06:33
Часовой пояс: UTC + 5