Является ли отсутствие в Java беззнаковых примитивных типов характеристикой Java как платформы или Java языком? - PullRequest
9 голосов
/ 01 декабря 2011

Есть вопросы о , почему Java не поддерживает неподписанные типы , и несколько вопросов о работе с неподписанными типами.Я провел некоторый поиск, и похоже, что Scala также не поддерживает неподписанные типы данных.Есть ли ограничение в языковом оформлении Java и Scala, в сгенерированном байт-коде или в самой JVM?Может ли быть какой-нибудь язык, который работает на JVM и в остальном идентичен Java (или Scala), но поддерживает примитивные типы данных без знака?

Ответы [ 4 ]

9 голосов
/ 01 декабря 2011

Только спецификация Java Bytecode определяет типы со знаком :

Целочисленными типами являются byte, short, int и long, значения которых 8-разрядные, 16-разрядные, 32-разрядные и 64-разрядные целые числа с двумя дополнительными числами со знаком

Но язык, реализованный поверх JVM, возможно, может добавить тип без знака на синтаксическом уровне и просто обработать преобразование на этапе компиляции.

2 голосов
/ 01 декабря 2011

Хотя неподписанный тип может эмулироваться на уровне байт-кода, есть некоторые недостатки:

  • Производительность: вам потребуется несколько операций с байт-кодом для каждой простой арифметической операции.Производительность кода с использованием эмулируемых типов без знака будет в два или три раза хуже, чем у кода с использованием типов со знаком.

  • Совместимость: большинство языков, работающих на JVM, очень стараются совместиться согромное количество кода Java там.Это, конечно, будет сразу же испорчено, когда будут введены дополнительные типы или когда некоторые переменные с «известными» типами будут обрабатываться по-разному.незначителен.

0 голосов
/ 05 мая 2018

Эта имеет поддержку для неподписанных типов в JVM.

0 голосов
/ 01 декабря 2011

Обработка арифметики без знака - это проблема языка / реализации, а не платформы - ее можно смоделировать на любой платформе, даже если не было встроенной поддержки.

JVM не имеет его в качестве типа, за исключением 'char', 16-разрядного значения без знака, поэтому Java / Scala / и т.д. не поддерживает его "из коробки".

...