Ключевой момент: литерал – это постоянное значение, которое появляется непосредственно в программе.
Например, 34 и 0.305 это литералы в следующих инструкциях:
int numberOfYears = 34; double weight = 0.305;
1. Целочисленные литералы
Целочисленный литерал может быть присвоен числовой переменной при условии, что он соответствует типу переменной. Если литерал слишком велик для хранения в переменной, то произойдёт ошибка компиляции. Инструкция byte b = 128, например, приведёт к ошибке компиляции, поскольку 128 не может быть сохранено в переменной типа byte (помните, что диапазон для значения byte с -128 до 127.)
Предполагается, что целочисленный литерал имеет тип int, значение которого находится между-231 (-2147483648) и 231 — 1 (2147483647). Для указания целочисленному литералу быть типом long, добавьте к нему букву L или l. Например, для написания в программе Java числа 2147483648, вы должны написать 2147483648L или 2147483648l, поскольку 2147483648 выходит за рамки диапазона значений int. Предпочтительней L поскольку l (L в нижнем регистре) легко может быть спутана с 1 (цифрой один).
Справка: по умолчанию целочисленный литерал является десятичным целым числом. Для обозначения двоичного целочисленного литерала используйте перед ним 0b или 0B (ноль B), для обозначения восьмеричного целочисленного литерала, используйте перед ним 0 (ноль), а для обозначения шестнадцатеричного целочисленного литерала, используйте перед ним 0x или 0X (ноль X). К примеру:
System.out.println(0B1111); // Отобразит 15 System.out.println(07777); // Отобразит 4095 System.out.println(0XFFFF); // Отобразит 65535
Шестнадцатеричные цифры, двоичные цифры и восьмеричные цифры представлены в Приложении F.
2. Литералы с плавающей запятой
Литералы с плавающей запятой пишутся с десятичной точкой. По умолчанию литералы с плавающей запятой (точкой) обрабатываются как значения типа double. Например, 5.0 считается значением double, а не float. Вы можете сделать число float добавив букву f или F, и вы можете сделать число double добавив букву d или D. Например, вы можете использовать 100.2f или 100.2F для числа float, и 100.2d или 100.2D для числа double.
double или float
Примечание: значения типа double являются более точными, чем значения типа float. Например:
System.out.println("1.0 / 3.0 это " + 1.0 / 3.0);
Отобразит 1.0 / 3.0 это 0.3333333333333333 (16 цифр после запятой).
System.out.println("1.0F / 3.0F это " + 1.0F / 3.0F);
Отобразит 1.0F / 3.0F это 0.33333334 (8 цифр после запятой).
Значение float имеет от 7 до 8 значимых цифр, а значение double имеет от 15 до 17 значимых цифр.
3. Экспоненциальная запись
Литералы с плавающей запятой могут быть записаны в научной нотации (экспоненциальной записи) в форме a * 10b. Например, экспоненциальная запись для 123.456 это 1.23456 * 102, а для 0.0123456 это 1.23456 * 10-2. Для экспоненциальной записи цифр используется специальный синтаксис. Например, 1.23456 * 102 пишется как 1.23456E2 или 1.23456E+2, а 1.23456 * 10-2 как 1.23456E-2.
E (или e) представляет экспоненту и может быть как в нижнем, так и в верхнем регистре.
Справка: для представления чисел с плавающей точкой используются типы float и double. Почему они называются числами с плавающей точкой (или с плавающей запятой)? Когда 50.534 преобразовывается в экспоненциальную запись, такую как 5.0534E+1, его десятичная точка перемещает (т.е. переплывает) на новую позицию.
Помните: для улучшения читаемости, Java позволяет использовать знаки подчёркивания между двумя цифрами в числовых литералах. Например, следующие литералы корректны:
long ssn = 232_45_4519; long creditCardNumber = 2324_4545_4519_3415L;
При этом, 45_ или _45 являются неверными. Знак подчёркивания должен находится между двумя цифрами.
Проверь себя:
- Сколько точных цифр хранится в переменной типа float или double?
- Какие из следующих литералов являются корректными для чисел с плавающей точкой?
- 12.3
- 12.3e+2
- 23.4e-2
- -334.4
- 20.5
- 39F
- 40D
- Что из следующего является тем же самым что и 52.534?
- 5.2534e+1
- 0.52534e+2
- 525.34e-1
- 5.2534e+0
- Что из следующего является корректными литералами?
- 5_2534e+1
- _2534
- 5_2
- 5_