— Амиго, я тебе завидую. Познание нового — это так прекрасно! А сегодня тебя ждёт новая интересная тема — литералы.
— Видимо я должен сказать, что я — самый счастливый робоученик на планете, Риша. Что ж, готов поглощать новые знания!
— Начинай прямо сейчас. Литералы — это конкретные данные, вписанные прямо в код программы. Мы сейчас говорим не о любых данных, а только о значениях примитивных типов и типе String.
Например, у тебя есть код:
Код | Литералы |
---|---|
|
|
— Литералы в этом коде — это число 5, число 10 и строка «Sum=».
Литералы целых чисел
— В языке Java тип есть у всего, в том числе и у литералов. Все целочисленные литералы (целые числа) в коде имеют тип int. Тип int является стандартным типом целых чисел в Java.
— Знаю такой тип, пользовался.
— А помнишь другие целочисленные типы, кроме int, которые занимают меньше места в памяти?
— Конечно! Это byte и short.
— Они. Так вот, если ты в своем коде решишь присвоить целочисленный литерал переменной типа byte или short, проблем не возникнет. Главное, чтобы значение литерала лежало внутри диапазона доступных значений типа переменной. Компилятор в Java достаточно умный, чтобы понять, что переменной типа byte можно присвоить целочисленный литерал 100.
Примеры:
Код | Описание |
---|---|
|
Скомпилируется отлично. |
|
Скомпилируется отлично. |
|
Будет ошибка компиляции: максимальное значение типа byte равно 127. |
— А что насчёт типа long?
— Литералы этого типа тоже можно написать в коде. Для этого в конце целого числа припиши латинскую букву L или l.
Примеры:
Код | Описание |
---|---|
|
Скомпилируется отлично. |
|
Ошибка компиляции: 3 миллиарда слишком большое число для литерала типа int. |
|
Ошибка компиляции: у литерала тип long, а у переменной тип int. К тому же, 3 миллиарда больше, чем максимальное число типа int. |
— Обратил внимание, как сложно читать большие числа в 10 и более знаков?
— Ага, если не включать робозрение, то сразу и не поймешь, 3 миллиарда там или 30.
— Чтобы упростить читаемость кода (а это важно!), в Java разрешили вставлять в числовые литералы символы подчеркивания (на значение числа они не влияют).
— Пример выше можно переписать с использованием символов подчеркивания, и он станет немного понятнее:
Код | Описание |
---|---|
|
Скомпилируется отлично. |
|
Ошибка компиляции: 3 миллиарда слишком большое число для литерала типа int. |
|
Ошибка компиляции: у литерала тип long, а у переменной тип int. К тому же 3, миллиарда больше, чем максимальное число типа int. |
— Так читать намного удобнее, хотя запятая вместо нижнего подчёркивания была бы привычнее!
— Запятую внутри числового литерала использовать было нельзя, потому что она уже используется. Например, для отделения друг от друга аргументов при вызове метода.
Литералы вещественных чисел
— Ты наверное уже догадался, что в коде можно задавать не только целочисленные, но и литералы с плавающей точкой (вещественные числа).
— и double, и float?
— Да. Собственно, правило очень простое: если в коде есть число и в его записи есть точка, это число — литерал с плавающей точкой. И не просто литерал, а литерал с типом double. Ну а для создания литерала типа float к числу в конце нужно приписать букву F (или f).
Примеры:
Код | Описание |
---|---|
|
Скомпилируется отлично. |
|
Скомпилируется отлично. |
|
Скомпилируется отлично. |
|
Скомпилируется отлично. |
|
Будет ошибка компиляции: переменная типа float, литерал типа double. |
— Кстати, можно явно превратить целочисленный литерал в литерал типа float или double, просто приписав к нему суффикс F (для float) или D (для double). Примеры:
Код | Описание |
---|---|
|
Скомпилируется отлично. |
|
Скомпилируется отлично. |
|
Будет ошибка компиляции: переменная типа 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 |
Литералы строк
— В коде также можно задавать и целые строки текста. Чтобы компилятор считал строку именно данными (строкой текста), а не частью кода, вся строка с двух сторон обрамляется двойными кавычками.
— Если в одной строке кода много двойных кавычек, они разбиваются на пары. Первая двойная кавычка обозначает начало литерала, следующая за ней — конец литерала. Следующая за ней — опять начало нового литерала, следующая за ней — конец второго литерала. И т.д.
— Каждый такой литерал имеет тип String.
Примеры
Код | Пояснение |
---|---|
|
В строке 5 литералов, каждый из которых состоит из одного символа «+» |
|
Литерал пустая строка. Строка, в которой нет символов. |
|
Тут два литерала. Результатом будет строка «2+3-5», но не число |
|
Тут тоже два литерала. Оператора return тут нет. |
— Если строковый литерал слишком длинный, его можно разбить на несколько строк и склеить «оператором плюс»:
Код | Пояснение |
---|---|
|
Если вывести эту строку на экран, весь текст выведется в одну строку! |
Литералы символов
— А что, если мне нужен литерал не из строки, а из отдельного символа? Я должен создать односимвольную строку?
— Нет, тебе в таком случае нужен литерал типа char
. Догадаешься, чем ограничивается с двух сторон такой литерал?
— Одинарными кавычками?
— Да, причём внутри одинарных кавычек обязательно должен быть символ и только один. Не может быть пустых одинарных кавычек.
Примеры:
Код | Пояснение |
---|---|
|
Литерал типа char. Содержит латинскую букву A. |
|
Литерал типа char. Содержит символ @ |
|
Литерал типа char. Содержит иероглиф японского алфавита. Да, так тоже можно. |
|
Литерал типа char. Содержит символ кодировки Unicode, заданный его номером. |
— В последнем примере задается символ из кодировки Unicode с помощью специальной записи: сначала идет префикс \u
, затем 4 шестнадцатеричных символа. Детальнее ты узнаешь об этом в ближайших лекциях.