Урок 2

Литералы


Значения примитивных типов данных в большинстве случаев инициализируются с помощью литералов.

1. Числовые литералы

1.1. Целочисленные литералы

Типы целочисленных литералов в Java:

  • десятичные 
  • восьмеричные 
  • шестнадцатеричные  
  • двоичные - начиная с Java 7

Все целочисленные литералы представляют значения int. Если значение литерала лежит в диапазоне byteshort или char, то его можно присвоить переменной этого типа без приведения типов. Для создания литерала типа long, необходимо явно указать компилятору, дополнив литерал буквой 'l' или 'L':

Пример 1.1. Целочисленные литералы представленные как long

long a1 = 220433L;
long a2 = 0x3FFl;

1.1.1. Десятичные литералы

Пример 1.2. Десятичные Литералы

int x1 = 878;
int x2 = +878;
int x3 = -878;

1.1.2. Восьмеричные литералы

Восьмеричные литералы начинаются с 0 и используют числа от 0 до 7, например:

Пример 1.3. Определение восьмеричного литерала

int six = 06; // Равно десятичному числу 6
int seven = 07; // Равно десятичному числу 7
int eight = 010; // Равно десятичному числу 8
int nine = 011; // Равно десятичному числу 9

1.1.3. Шестнадцатеричные литералы

  • Шестнадцатеричные литералы создаются используя следующие символы [0-9a-fA-F]
  • Должны начинаться с 0x или 0X.
  • Разрешается использовать до 16 символов в шестнадцатеричных числах, не учитывая префикс 0x и необязательный суффикс L.

Например:

Пример 1.4. Определение шестнадцатеричных литералов

int a1 = 0X0005;
int a2 = 0x7ddfffff;
int a3 = 0xcccccccc;

1.1.4. Двоичные литералы в Java 7

Для определения двоичного литерала, добавьте префикс 0b или 0B к числу. Используются числа 0 и 1. Например:

Пример 1.5. Определение двоичных литералов

int i1 = 0b101;
int i2 = 0B101; 

1.2. Литералы с плавающей точкой

Пример 1.6. Определение литерала с плавающей точкой

double d1 = 145454545.676767676;
double d2 = .4;// число 0.4

Всем литералам с плавающей точкой по-умолчанию присваивается тип double. Чтобы создать литерал типа float, нужно после литерала указать букву 'f' или 'F'.

Например:

Пример 1.7. Присваивание литерала с плавающей точкой типу float

float f1 = 56.45455; // Ошибка компиляции
float f2 = 343434.454563F; 
float f3 = 78.45f; 

Можно добавить символ 'D' или 'd' к double литералу, но это не обязательно:

Пример 1.8. Добавление "D" к double литералу

double d3 = 454545.454545D; 
double d4 = 654.321;
double d5 = 54.32d;

Существует так называемая научная нотация записи вещественных чисел:

double d6 = 1.5e14;

Значение этого числа равно 1.5\cdot 10^{14}.

Может использоваться строчная или прописная буква  - 'e', 'E'. Также степень может содержать знак + или -. Например:

double d7 = 1.5E+14;
double d8 = 1.5e-14;

1.3. Подчеркивание в числовых литералах

Начиная с Java 7, добавлена возможность использовать любое количество символов подчеркивания для разделения групп цифр, что улучшает читабельность.

Подчеркивание может разделять только цифры! Нельзя использовать подчеркивания в следующих местах:

  • В начале или конце числа
  • Рядом с десятичной точкой в числе с плавающей точкой
  • Перед 'F', 'f', 'l' или 'L' суффиксами
  • Для разделения символов префиксов

Пример 1.9. Использование подчеркиваний в числовых литералах

int i1 = 12_567;            // OK
double d1 = 56.356_234;      // OK
short s = 0b000____0100;    // OK
int i2 = 220_;              // Ошибка компиляции
int i3 = 0_x2F;             // Ошибка компиляции
int i4 = 0x_3E;             // Ошибка компиляции
float f1 = 6345.56_f;       // Ошибка компиляции
float f2 = 3423_.87f;       // Ошибка компиляции

2. Boolean литералы

Значение литерала типа boolean может быть определено как true или false:

Пример 2.1. Определение boolean литерала

boolean b1 = true; // Правильно
boolean b2 = 0; // Не правильно

3. Символьные литералы

Для представления символов типа char в Java используется кодировка в Unicode, определяющая полный набор международных символов на всех известных языках мира.

Символьные литералы могут быть представлены в виде символа заключенного в одинарные кавычки:

Пример 3.1. Определение символьных литералов единичными символами

char c1 = 'n';
char c2 = '#';

Существует также механизм для непосредственного ввода значения символа в восьмеричной или шестнадцатеричной форме. Для ввода значений в восьмеричной форме служит символ обратной косой черты, за которым следует трехзначное число. Например:

Пример 3.2. Определение символьных литералов используя значение Unicode

char letterO = '\u004F'; // Буква 'O' в шестнадцатеричной форме
char letter_a = '\141';  // Буква 'a' в восьмеричной форме

Есть возможность присвоения числового литерала символьному типу. Числовой литерал должен находиться в диапазоне от 0 до 65535. Например:

Пример 3.3. Присвоение числового литерала переменной символьного типа

char a1 = 0x675; // шестнадцатеричный целочисленный литерал
char a2 = 345;   // десятеричный целочисленный литерал
char a3 = (char)80000; // Делается приведение типов, т.к. 80000 
//превышает диапазон char типа

Символ обратной косой черты может быть использован для обозначения символов  не имеющих точного написания, например символ перевода строки, табуляции, backspace, двойные и одинарные кавычки:

Пример 3.4. Определение символьных литерала с помощью обратной косой черты

char c1 = '\''; 
char c2 = '\n';

4. Строковые литералы

  • Для обозначения строковых литералов последовательность символов заключается в двойные кавычки.
  • Управляющие символы и восьмеричная или шестнадцатеричная форма записи, определенные для символьных литералов, действуют точно так же и в строковых литералах.
  • Строки могут располагаться только на одной строке исходного кода, нельзя открывающую кавычку поставить на одной строке, а закрывающую — на следующей.

 

Пример 4.1. Определение строковых литералов

String str1 = "MyProgram";
String str2 = "first line\nsecond line";
String str3 = "\"This is in quotes\"";
String str4 = "\u004F letter";//O letter

 

Источники:  

1. SCJP Sun Certified Programmer for Java 6 Exam 310-065

2. Java 8 Programmer II Study Guide, Numeric Literals by Esteban Herrera

3. Герберт Шилдт. Java 8. Руководство для начинающих. Глава 3. Типы данных переменные и массивы



0 comments
Leave your comment: