Почему в Java нет байтов или коротких литералов?
Я могу создать литерал long, добавив L к значению; почему я не могу создать литерал short или byte каким-то аналогичным образом? Почему мне нужно использовать литерал int с приведением?
и если ответ "Потому что не было короткого литерала в C", то почему нет коротких литералов в C?
на самом деле это не влияет на мою жизнь каким-либо значимым образом; достаточно легко написать (короткий) 0 вместо 0 или что-то в этом роде. Но непоследовательность заставляет меня любопытствовать; это один из тех вещей, которые беспокоят вас, когда вы поздно ночью. Кто-то в какой-то момент принял дизайнерское решение, чтобы сделать возможным ввод литералов для некоторых примитивных типов, но не для всех из них. Зачем?
4 ответа:
В C,
int
по крайней мере, должен был иметь "естественный" размер слова процессора иlong
вероятно, должен был быть" большим естественным " размером слова (не уверен в этой последней части, но это также объяснило бы, почемуint
иlong
имеют одинаковый размер на x86).теперь, я думаю: для
int
иlong
, есть естественное представление, которое точно вписывается в регистры машины. Однако на большинстве процессоров меньшие типыbyte
иshort
должны быть дополнены Анint
в любом случае перед использованием. Если это так, вы можете также актерский состав.
Я подозреваю, что это случай "ничего не добавляйте к языку, если он действительно не добавляет ценности" - и это было замечено как добавление достаточно малой ценности, чтобы не стоить этого. Как вы сказали, это легко обойти, и, честно говоря, это редко необходимо в любом случае (только для уточнения).
то же самое верно и в C#, и я никогда особенно не пропускал его ни на одном языке. То, что я пропускаю в Java, - это беззнаковый тип байта:)
другая причина может заключаться в том, что JVM не знает о short и byte. Все вычисления и хранение выполняются с помощью ints, longs, floats и Double внутри JVM.
есть несколько вещей, чтобы рассмотреть.
1) Как обсуждалось выше, JVM не имеет понятия о байтовых или коротких типах. Обычно эти типы не используются в вычислениях на уровне JVM; поэтому можно подумать, что было бы меньше использования этих литералов.
2) для инициализации байтовых и коротких переменных, если выражение int является постоянным и в допустимом диапазоне типа оно неявно приведено к целевому типу.
3) всегда можно привести литерал, экс (короткий)10