Являются ли числовые операции с использованием Kotlin столь же быстрыми, как эквивалент с Java-примитивами?

Java имеет примитивы, потому что использование их приводит к более эффективному, читабельному и менее подверженному ошибкам коду, чем их коллеги, основанные на классе.

Выполняет ли Kotlin оптимизацию времени компиляции, чтобы гарантировать, что числовые операции выполняются на одном уровне (или лучше), чем Java-примитивы?

Да, Котлин также использует примитивы. Но учтите, что:

  1. Причины «менее подверженных ошибкам» на самом деле не применяются в Котлине: типы в коробке не могут быть обнуляемы, если вы не попросите об этом (как и примитивы), и вы не можете путать == и equals .

  2. Также нет «более читаемого»: вы можете использовать операторы с обоими.

  3. «Более эффективная» часть очень подходит, но вы не можете сделать односимвольную опечатку, упомянутую в верхнем ответе на связанный вопрос: вам нужно написать java.lang.Long чтобы получить тип в штучной упаковке!

С другой стороны, вам нужно знать, что IntArray более эффективен, чем Array<Int> (соответствует Java int[] и java.lang.Integer[] ), несмотря на то, что оба они используют Int .

Цитирование документов :

Некоторые типы могут иметь специальное внутреннее представление – например, числа, символы и логические значения могут быть представлены как примитивные значения во время выполнения, но для пользователя они выглядят как обычные классы. В этом разделе мы описываем основные типы, используемые в Kotlin: числа, символы, булевы, массивы и строки.

Так что да, компилятор оптимизирует так, что примитивные типы JVM используются во время выполнения. Конечно, есть определенные исключения:

На платформе Java номера физически хранятся как примитивные типы JVM, если только нам не нужна ссылка с номером NULL (например, Int?) Или дженерики. В последнем случае номера в коробке.

В исходной документации есть также намек, например Int :

Представляет 32-разрядное целое число со знаком. В JVM значения, не связанные с нулевым значением этого типа, представлены как значения примитивного типа int.

Intereting Posts
Получение ошибки «Несовместимые типы» при использовании кода, сгенерированного из класса данных Kotlin Чтение JSON POST с использованием PHP Kotlin: Android-приложение неожиданно останавливается из-за textView Что такое kotlin, равное полю аннотации Java с ограниченным типом подстановочного знака? Многострочный / сложный инициализатор свойств без лямбда Котлин андроид ошибка ProGuard Многокритериальная сортировка Kotlin не компилируется Отключить просмотр прокрутки пейджера Viewpager в Котлине Объект базы данных Singleton с параметризованной инициализацией при запуске? Почему у нас есть функции, которые назвали componentN в Котлине Напишите большой входной поток в файл в Котлине Ошибка: (2, 0) Не удалось найти метод 'org.gradle.api.internal.file.DefaultSourceDirectorySet Как обновить элемент в ArrayList без знания индекса в Android с базой данных Firebase Realtime? Доступ к статической функции расширения из другого класса в Котлине? Разрешены только безопасные или неаудированные звонки, разрешенные для нулевого типа приемника arraylist