Русский
Русский
English
Статистика
Реклама

Перевод Проверка на равенство в Kotlin

Для будущих учащихся на курсе "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 = 5val secondInt = 5println(firstInt == secondInt)  // trueprintln(firstInt === secondInt) // trueprintln(firstInt.equals(secondInt)) // true

В случае примитивных типов данных сравниваются содержащиеся в них значения.

2. Сравнение примитивов в обертке

val firstInt = Integer(5)val secondInt = Integer(5)println(firstInt == secondInt)  // trueprintln(firstInt === secondInt) // falseprintln(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) // falseprintln(student1 == student2) // falseprintln(student1.equals(student2)) // falseprintln(student1.name === student2.name) // trueprintln(student1.name == student2.name) // trueprintln(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) // falseprintln(student1 == student2) // trueprintln(student1.equals(student2)) // true

4. Сравнение отрицательного и положительного нуля

val negativeZero = -0.0fval positiveZero = 0.0fprintln(negativeZero == positiveZero) // trueprintln(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
К списку статей
Опубликовано: 10.12.2020 12:12:32
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Блог компании otus. онлайн-образование

Программирование

Kotlin

Backend

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru