[Программирование, Kotlin] Проверка на равенство в Kotlin (перевод)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Для будущих учащихся на курсе "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
===========Похожие новости:
- [Python, Программирование] Ультимативный гайд по поиску утечек памяти в Python
- [Программирование, Проектирование и рефакторинг] Универсальная архитектура приложений
- [Программирование, Разработка мобильных приложений, Разработка под Android, Kotlin] Практическое руководство по использованию Hilt с Kotlin (перевод)
- [Информационная безопасность, Читальный зал, Научно-популярное] Геоблокировка: как ограничивают доступ к информации и кому это нужно
- [Машинное обучение, Гаджеты, Научно-популярное, Звук] Шумно и стрессово? Или шумно и весело? Ваш телефон может слышать разницу (перевод)
- [Программирование, C++] Введение в регулярные выражения в современном C++ (перевод)
- [Программирование, Разработка игр] Семь талантливых стажеров AI@Unity 2020. Часть 2 (перевод)
- [Глобальные системы позиционирования, Программирование, Компиляторы, Lua, Робототехника] Umka и трактор: первый опыт практического применения нового языка
- [Программирование, Отладка] Intel ControlFlag — система машинной отладки человеческих ошибок кода
- [Программирование] Связные списки, трюки с указателями и хороший вкус (перевод)
Теги для поиска: #_programmirovanie (Программирование), #_kotlin, #_kotlin, #_backend, #_blog_kompanii_otus._onlajnobrazovanie (
Блог компании OTUS. Онлайн-образование
), #_programmirovanie (
Программирование
), #_kotlin
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 14:03
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Для будущих учащихся на курсе "Kotlin Backend Developer" подготовили перевод полезного материала.
Также приглашаем посмотреть открытый урок по теме "Kotlin multiplatform: Front/Back на одном языке".
val firstInt = 5
val secondInt = 5 println(firstInt == secondInt) // true println(firstInt === secondInt) // true println(firstInt.equals(secondInt)) // true val firstInt = Integer(5)
val secondInt = Integer(5) println(firstInt == secondInt) // true println(firstInt === secondInt) // false println(firstInt.equals(secondInt)) // true 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 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 val negativeZero = -0.0f
val positiveZero = 0.0f println(negativeZero == positiveZero) // true println(negativeZero.equals(positiveZero)) // false Узнать подробнее о курсе "Kotlin Backend Developer".Посмотреть открытый урок по теме "Kotlin multiplatform: Front/Back на одном языке".
ЗАБРАТЬ СКИДКУ =========== Источник: habr.com =========== =========== Автор оригинала: Jasmeet Kaur ===========Похожие новости:
Блог компании OTUS. Онлайн-образование ), #_programmirovanie ( Программирование ), #_kotlin |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 14:03
Часовой пояс: UTC + 5