1. Литералы целых чисел

А теперь новая интересная тема — литералы. Данные, вписанные прямо в код программы, называют литералами. В данном случае речь идет не о любых данных, а о значениях примитивных типов и типе String.

Например, у вас есть код:

Код Литералы
int a = 5;
int b = a + 10;
String s = "Sum=" + (a + b);
5
10
"Sum="

Литералы в этом коде — это число 5, число 10 и строка Sum=.

В языке Java тип есть у всего, включая литералы. Все целочисленные литералы (целые числа) в коде имеют тип int. Тип int является стандартным типом целых чисел в Java.

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

Компилятор в Java достаточно умный, чтобы понять, что переменной типа byte можно присвоить целочисленный литерал 100, и проблем не возникнет.

Примеры:

Код Описание
int a = 300;
Скомпилируется отлично.
byte a = 100; 
Скомпилируется отлично.
byte a = 300; 
Будет ошибка компиляции: максимальное значение типа byte равно 127.

В коде также можно писать литералы типа long. Для этого в конце целого числа нужно написать латинскую букву L или l.

Примеры:

Код Описание
long a = 3000000000L; 
Скомпилируется отлично.
long a = 3000000000; 
Ошибка компиляции: 3 миллиарда слишком большое число для литерала типа int.
int a = 3000000000L; 
Ошибка компиляции: у литерала тип long, а у переменной тип int. К тому же, 3 миллиарда больше, чем максимальное число типа int.

Обратили внимание, как сложно читать большие числа в 10 и более знаков? Не сразу поймешь, 3 миллиарда в коде или 30? Чтобы упростить читаемость кода (а это важно!), в Java разрешили вставлять в числовые литералы символы подчеркивания (на значение числа они не влияют).

Пример выше можно переписать с использованием символов подчеркивания, и он станет немного понятнее:

Код Описание
long a = 3_000_000_000L; 
Скомпилируется отлично.
long a = 3_000_000_000; 
Ошибка компиляции: 3 миллиарда слишком большое число для литерала типа int.
int a = 3_000_000_000L; 
Ошибка компиляции: у литерала тип long, а у переменной тип int. К тому же 3, миллиарда больше, чем максимальное число типа int.

Запятую внутри числового литерала использовать было нельзя, потому что она уже используется. Например, для отделения друг от друга аргументов при вызове метода.



2. Литералы вещественных чисел

В коде можно задавать не только целочисленные, но и литералы с плавающей точкой (вещественные числа).

Собственно, правило очень простое: если в коде есть число и в его записи есть точка, это число — литерал с плавающей точкой. И не просто литерал, а литерал с типом double.

Можно создать и литерал типа float, но для этого к числу в конце нужно приписать букву F (или f).

Примеры:

Код Описание
double a = 100.0; 
Скомпилируется отлично.
double a = 100.;
Скомпилируется отлично.
double a = .0;
Скомпилируется отлично.
float a = 100.0f; 
Скомпилируется отлично.
float a = 100.0; 
Будет ошибка компиляции: переменная типа float, литерал типа double.

Кстати, можно явно превратить целочисленный литерал в литерал типа float или double, просто приписав к нему суффикс F (для float) или D (для double). Примеры:

Код Описание
double a = 100D; 
Скомпилируется отлично.
float a = 100F; 
Скомпилируется отлично.
int a = 300D; 
Будет ошибка компиляции: переменная типа int, литерал типа double.

У литералов с плавающей точкой есть «научная форма записи»: кроме знаковой части числа можно еще указать и степень десятки этого числа. Пример:

Литерал Математическая запись Итоговое значение
1.23E2
1.23 * 102
123.0
1.23E3
1.23 * 103
1230.0
1.23E-6
1.23 * 10-6
0.00000123
1E6
1.0 * 106
1000000.0
1E-10
1.0 * 10-10
0.0000000001


3. Литералы строк

В коде также можно задавать и целые строки текста. Чтобы компилятор считал строку именно данными (строкой текста), а не частью кода, вся строка с двух сторон обрамляется двойными кавычками.

Если в одной строке кода много двойных кавычек, они разбиваются на пары. Первая двойная кавычка обозначает начало литерала, следующая за ней — конец литерала. Следующая за ней — опять начало нового литерала, следующая за ней — конец второго литерала. И т.д.

Каждый такой литерал имеет тип String.

Примеры

Код Пояснение
"+" + "+" + "+" + "+" + "+"
В строке 5 литералов, каждый из которых состоит из одного символа +
""
Литерал пустая строка. Строка, в которой нет символов.
"2+3" + "-5"
Тут два литерала. Результатом будет строка 2+3-5, но не число
"return" + ";"
Тут тоже два литерала. Оператора return тут нет.

Если строковый литерал слишком длинный, его можно разбить на несколько строк и склеить «оператором плюс»:

Код Пояснение
String s = "Буря мглою небо кроет "
         + "Вихри снежные крутя "
         + "То как зверь она завоет "
         + "То заплачет как дитя";
Если вывести эту строку на экран, весь текст выведется в одну строку!


4. Литералы символов

В коде можно задавать не только строковые литералы, но и литералы из отдельных символов. В данном случае речь идет не о строке, состоящей из одного символа, а о литералах типа char.

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

Примеры:

Код Пояснение
'A'
Литерал типа char. Содержит латинскую букву A.
'@' 
Литерал типа char. Содержит символ @
'' 
Литерал типа char. Содержит иероглиф японского алфавита. Да, так тоже можно.
'\u1f3a'
Литерал типа char. Содержит символ кодировки Unicode, заданный его номером.

В последнем примере задается символ из кодировки Unicode с помощью специальной записи: сначала идет префикс \u, затем 4 шестнадцатеричных символа. Детальнее об этом в ближайших лекциях.