Intereting Posts
Кинжал 2 не может вводить из подкомпонента (котлин) Невозможно скомпилировать проект с использованием Gradle и Kotlin Являются ли методы расширения и свойства расширения плохой практикой? Как я могу более легко использовать транзакции Jooq в Котлине Как мне выполнить «перерыв» или «продолжить», когда в функциональном цикле внутри Котлина? Почему Smartcast не работает после nullcheck Как получить доступ к статическому методу Java в подклассе Kotlin? Как преобразовать многие AsyncTasks в Rx Observables в Android? Больше удовольствия с делегатами Котлина Тест интеграции с весной – аутентификацияПриглашение не вводится Kotlin: Общая функция как возвращаемый тип? Тесты Kotlin не работают из командной строки с ClassNotFoundException, но работают с IntelliJ Заменить textView для NumberPicker – Android Котлин || Не удалось добавить библиотеку в Мое приложение? Вторичный конструктор Котлина

Являются ли числовые операции с использованием 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.