Какой тип имеет литерал 0x0bp3
Перейти к содержимому

Какой тип имеет литерал 0x0bp3

  • автор:

Литералы

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

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

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

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

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

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

long a1 = 220433L; long a2 = 0x3FFl;
Десятичные литералы
int x1 = 878; int x2 = +878; int x3 = -878;
Восьмеричные литералы

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

int six = 06; // Равно десятичному числу 6 int seven = 07; // Равно десятичному числу 7 int eight = 010; // Равно десятичному числу 8 int nine = 011; // Равно десятичному числу 9
Шестнадцатеричные литералы
  • Шестнадцатеричные литералы создаются используя следующие символы [0-9a-fA-F]
  • Должны начинаться с 0x или 0X .
  • Разрешается использовать до 16 символов в шестнадцатеричных числах, не учитывая префикс 0x и необязательный суффикс L .
int a1 = 0X0005; int a2 = 0x7ddfffff; int a3 = 0xcccccccc;
Двоичные литералы в Java 7

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

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

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

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

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

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

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

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

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

double d6 = 1.5e14;

Значение этого числа равно 1.5 умножить на 10 в четырнадцатой степени.

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

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

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

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

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

  • В начале или конце числа
  • Рядом с десятичной точкой в числе с плавающей точкой
  • Перед ‘F’ , ‘f’ , ‘l’ или ‘L’ суффиксами
  • Для разделения символов префиксов
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 :

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

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

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

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

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

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

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

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

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

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

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

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

  • Для обозначения строковых литералов последовательность символов заключается в двойные кавычки.
  • Управляющие символы и восьмеричная или шестнадцатеричная форма записи, определенные для символьных литералов, действуют точно так же и в строковых литералах.
  • Строки могут располагаться только на одной строке исходного кода, нельзя открывающую кавычку поставить на одной строке, а закрывающую — на следующей.
String str1 = "MyProgram"; String str2 = "first line\nsecond line"; String str3 = "\"This is in quotes\""; String str4 = "\u004F letter";//O letter

Презентацию с видео можно скачать на Patreon .

Литералы

Целочисленные литералы — самый используемый тип в программах. Любое целочисленное значение является числовым литералом, т.е. значения 1, 5, 9, 42 и т.п. являются числовыми литералами с основанием 10. Также можно использовать восьмеричные и шестнадцатиричные значения.

Восьмиричные значения обозначаются ведущим нулем (обычные десятичные числа не могут иметь ведущий нуль). По этой причине с виду нормальное число 09 вызовет ошибку компиляции, так как выйдет за пределы диапазона от 0 до 7 допустимых восьмеричных значений.

Шестнадцатиричные значения обозначают ведущим нулём и символом x (икс). Можно использовать маленький (0x) и большой (0X) символ в числах. Диапазон допустимых цифр — от 0 до 15, где цифры от 10 до 15 заменяются буквами от A до F (можно также использовать символы от a до f в нижнем регистре).

Целочисленные литералы создают значения типа int. Если вы создали переменную типа byte или long, а значение литерала находится в диапазоне допустимых значений этих типов, то ошибки не возникает. Не возникает проблем и с типом long, у которого диапазон значений всегда больше, чем у int. Но при этом нужно явно указать, что значение литерала имеет тип long при помощи строчной или прописной буквы L. Например, 899888777666555444333L.

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

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

Числа с плавающей точкой представляют десятичные значения с дробной частью. Число можно записать в двух вариантах — в стандартной и научной форме записи. Стандартная форма — целое число, за которым следуют десятичная точка и дробная часть (например, 3.14). Научная форма записи использует стандартную форму записи числа с плавающей точкой, к которой добавлен суффикс, указывающий степенную функцию числа 10, на которую нужно умножить данное число. Для указания экспоненциальной функции используют символ E или e, за которыми следует десятичное число (положительное или отрицательное). Например, 5.07E12.

По умолчанию литералам с плавающей точкой присвоен тип double. Если вам нужен тип float, то нужно дописать символ F или f. Кстати, для double можно использовать суффиксы D или d, но в этом нет необходимости.

Также возможна запись шестнадцатиричных литерал с плавающей точкой, но на практике я не встречал подобную запись. В этом случае вместо E используется P (или p) — 0x14.3p2.

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

В Java символы представляют собой 16-битовые значения в наборе символов Unicode. Эти значения можно преобразовать в целые значения и применить операции сложения и вычитания. Символьные литералы обрамляются одинарными кавычками. Обычные символы можно ввести стандартным способом, например, ‘c’, ‘a’, ‘@’. Существуют также символы, которые следует экранировать обратным слешем, например, чтобы вывести сам символ одинарной кавычки, нужно использовать вариант ‘\n». Для символа новой строки используется ‘\n’.

Можно вывести нужный символ, используя его восьмеричное или шестнадцатиричное значение. При восьмеричной форме используют обратный слеш, за которым следует трёхзначный номер — ‘\143’.

Для ввода шестнадцатиричного значения используют обратный слеш, символ u, за которыми следуют четыре шестнадцатиричные цифры, например, ‘\u0061’.

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

Строковые литералы — это набор символов в двойных кавычках, например, «Кот — это муж кошки». Внутри строковых литералов также можно использовать управляющие символы, например, для перевода на новую строку — «Кот\nКошка\nКотёнок».

Булевы литералы

Есть только два булевых литерала — true и false. В отличие от некоторых языков программирования, эти значения не преобразуются в числовые значения. При этом литерал true не равен 1, а литерал false не равен 0.

JDK 7

Раньше Android не поддерживал JDK 7. Сейчас поддержка имеется и стали доступны новые возможности.

В JDK 7 можно использовать целочисленные литералы в двоичной системе. Для этого нужно использовать префикс 0b или 0B:

 int x = 0b1010; 

Кроме того, в JDK 7 можно вставлять символы подчёркивания для облегчения чтения больших числовых литералов:

 int x = 123_456_789; double num = 8_343_398.0; 

Символы подчёркивания будут проигнорированы компилятором. Учтите, что можно использовать несколько подряд символов подчёркивания, но нельзя использовать символы подчёркивания в начале или в конце литерала.

Подобная запись удобна при записи вручную программистом номеров телефонов и тому подобных вещей, чтобы визуально лучше анализировать значения. А умная железка сама разберётся, что к чему и не будет удивляться символам подчёркивания в числах.

Какой тип имеет литерал 0x0bp3

Скачай курс
в приложении

Перейти в приложение
Открыть мобильную версию сайта

© 2013 — 2024. Stepik

Наши условия использования и конфиденциальности

Get it on Google Play

Public user contributions licensed under cc-wiki license with attribution required

Какой тип имеет литерал 0x0bp3

Круть! Просто, лаконічно, доступно! Подякував!) І супер класно особисто для мене, що я нарешті все розумію, а н едивлюсь на це як баран на нові ворота)))

Viktoriya Уровень 43
16 ноября 2023
Спасибо за хорошее объяснение!��
Максим Li Уровень 36
15 ноября 2023

Все хорошо. Когнитивный диссонанс вызвало только то, что литерал из строк тоже примитивное значение. Думаю, что как только java компилятор сталкивается при чтении файла с таким литералом, то он автоматом попадает в объект класса String. Или я ошибаюсь? Что хотел тогда сказать автор, засунув строку к примитивным типам данных?

Anatoly Уровень 30
17 августа 2023
Islam Yunusov Уровень 31
5 августа 2023

Почему в примере с «Джедайской техникой» вы усложнили код, используя класс StringBuilder, если в конечном счёте всё равно преобразовали его в обычный класс String с помощью метода toString()? )) Ведь это можно было сделать проще. Ваш код: int smile = 0x1F600; // Здесь шестнадцатеричный код эмоджи StringBuilder sb = new StringBuilder(); sb.append(Character.toChars(smile)); // Собираем в StringBuilder System.out.println(«Улыбающееся лицо: » + sb.toString()); // Выводим Было бы проще: String a = new String(Character.toChars(0x1F600)); System.out.println(a);

FeatHonnar Уровень 16
18 июля 2023

«Все литералы — это примитивные значения (строки, числа, символы, булевы значения). Нельзя создать литерал-объект. Единственный литерал, связанный с объектом — это null.» Так строки — это объекты, нет?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *