Вопрос

Похоже, что когда вы вводите число в Java, компилятор автоматически считывает его как целое число, вот почему при вводе (long) 6000000000 (не в диапазоне целых чисел) он будет жаловаться на то, что 6000000000 не является целым числом.Чтобы исправить это, я должен был указать 6000000000L.Я только что узнал об этой спецификации.

Существуют ли другие спецификации чисел, такие как short, byte, float, double?Похоже, что это было бы неплохо иметь, потому что (я предполагаю), если бы вы могли указать, что число, которое вы вводите, является коротким, тогда java не пришлось бы его приводить - это предположение, поправьте меня, если я ошибаюсь.Обычно я бы сам искал этот вопрос, но я даже не знаю, как называется такая спецификация номера.

Это было полезно?

Решение

Существуют специальные суффиксы для long (например. 39832L), float (например. 2.4f) и double (например. -7.832d).

Если суффикс отсутствует и это целочисленный тип (например, 5623), предполагается, что это int.Если это не целочисленный тип (например. 3.14159), предполагается, что это double.

Во всех остальных случаях(byte, short, char), вам нужен приведение, поскольку конкретного суффикса нет.

Спецификация Java допускает использование суффиксов как в верхнем, так и в нижнем регистре, но версия в верхнем регистре для longs предпочтительнее, так как верхний регистр L труднее спутать с цифрой 1 чем нижний регистр l.

См. Раздел JLS 3.10 кровавые подробности (см. определение IntegerTypeSuffix).

Другие советы

Я надеюсь, вы не будете возражать против небольшого касательства, но подумал, что вам, возможно, будет интересно узнать, что, кроме F (для поплавка), D (для двойного), и L (надолго), было внесено предложение чтобы добавить суффиксы для byte и shortY и S соответственно.Это избавило бы от необходимости приводить к байтам при использовании литерального синтаксиса для байтовых (или коротких) массивов.Цитирую пример из предложения:

ОСНОВНОЕ ПРЕИМУЩЕСТВО:Почему платформа лучше, если предложение будет принято?

грубый код, подобный

 byte[] stuff = { 0x00, 0x7F, (byte)0x80,  (byte)0xFF};

может быть перекодирован как

 byte[] ufum7 = { 0x00y, 0x7Fy, 0x80y, 0xFFy };

Джо Дарси курирует Project Coin для Java 7, и его блог это был простой способ отслеживать эти предложения.

Это литералы и описаны в раздел 3.10 спецификации языка Java.

По умолчанию любой целочисленный примитивный тип данных (byte, short, int, long) будет рассматриваться как интервал введите Java-компилятор.Для байт и короткий, пока присвоенное им значение находится в их диапазоне, проблем нет и суффикс не требуется.Если значение, присвоенное байт и короткий превышает их диапазон, требуется явное приведение типов.

Бывший:

byte b = 130; // CE: range is exceeding.

чтобы преодолеть это, выполните приведение типов.

byte b = (byte)130; //valid, but chances of losing data is there.

В случае длинного типа данных он может без проблем принимать целочисленное значение.Предположим, мы назначаем как

Long l = 2147483647; //which is max value of int

в этом случае суффикс типа L/l не требуется.По умолчанию значение 2147483647 рассматривается компилятором Java как тип int.Приведение внутреннего типа выполняется компилятором, и int автоматически повышается до типа Long.

Long l = 2147483648; //CE: value is treated as int but out of range 

Здесь нам нужно поставить суффикс L, чтобы Java-компилятор воспринимал литерал 2147483648 как длинный тип.

наконец-то

Long l = 2147483648L;// works fine.

Кажется, что эти хорошо бы потому что (я предполагаю) если бы вы могли укажите количество вы печатаете в краткое тогда Java не придется брось его

Поскольку синтаксический анализ литералов происходит во время компиляции, это абсолютно не имеет значения с точки зрения производительности.Единственная причина , по которой short и byte суффиксы были бы хороши тем, что они приводят к более компактному коду.

Учитывать:

long l = -1 >>> 1;

против

int a = -1;
long l = a >>> 1;

Теперь вы ожидаете, что фрагменты кода будут давать одинаковое значение переменной. l.Итак, нам нужно выражение int литералы, которые нужно сделать как intс.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top