Перейти к основному содержимому

Введение в примитивы Java

· 8 мин. чтения

Упражнение: Сложение двух чисел

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

ANDROMEDA

1. Обзор

Язык программирования Java имеет восемь примитивных типов данных.

В этом уроке мы рассмотрим, что представляют собой эти примитивы, и рассмотрим каждый тип.

2. Примитивные типы данных

В Java определены восемь примитивов: int , byte , short , long , float , double , boolean и char . Они не считаются объектами и представляют необработанные значения.

Они хранятся непосредственно в стеке (ознакомьтесь с этой статьей для получения дополнительной информации об управлении памятью в Java).

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

Начнем с краткой справки:

   | Тип    | Размер (бит)    | Минимум    | Максимум    | Пример   | 
| `байт` | 8 | -2 ^7 | 2 ^7 – 1 | `байт б = 100;` |
| `короткая` | 16 | -2 ^15 | 2 ^15 – 1 | `короткий с = 30_000;` |
| `инт` | 32 | -2 ^31 | 2 ^31 – 1 | `интервал я = 100_000_000;` |
| `длинная` | 64 | -2 ^63 | 2 ^63 – 1 | `длинный l = 100_000_000_000_000;` |
| `плавать` | 32 | -2 ^-149 | ( ^2-2-23 )·2 ^127 | `поплавок f = 1,456f;` |
| `двойной` | 64 | -2 ^-1074 | (2-2 ^-52 )·2 ^1023 | `двойное f = 1,456789012345678;` |
| `уголь` | 16 | 0 | 2 ^16 – 1 | `символ с = 'с';` |
| `логический` | 1 | – | – | `логическое значение b = истина;` |

2.1. инт

Первый примитивный тип данных, который мы рассмотрим, — это int . Также известный как целое число, тип int содержит широкий диапазон значений не дробных чисел.

В частности, Java хранит его, используя 32 бита памяти. Другими словами, он может представлять значения от -2 147 483 648 (-2 ^31 ) до 2 147 483 647 (2 ^31 -1).

В Java 8 можно хранить целое число без знака до 4 294 967 295 (2 ^32 -1) с помощью новых специальных вспомогательных функций.

Мы можем просто объявить int :

int x = 424_242;

int y;

Значение по умолчанию для int , объявленного без присваивания, равно 0.

Если переменная определена в методе, мы должны присвоить значение, прежде чем сможем ее использовать.

Мы можем выполнять все стандартные арифметические операции над int s. Просто имейте в виду, что десятичные значения будут обрезаны при выполнении этих операций с целыми числами.

2.2. байт

byte — это примитивный тип данных, похожий на int , за исключением того, что он занимает всего 8 бит памяти. Вот почему мы называем это байтом. Поскольку объем памяти очень мал, byte может содержать только значения от -128 (-2 ^7 ) до 127 (2 ^7 – 1).

Вот как мы можем создать байт :

byte b = 100;

byte empty;

Значение байта по умолчанию также равно 0.

2.3. короткая

Следующая остановка в нашем списке примитивных типов данных в Java — короткая .

Если мы хотим сэкономить память, а byte слишком мало, мы можем использовать тип, находящийся где-то между byte и int : short .

При 16-битной памяти это половина размера int и вдвое больше размера byte . Его диапазон возможных значений составляет от -32 768 (-2 ^15 ) до 32 767 (2 ^15 - 1).

Short объявляется следующим образом:

short s = 20_020;

short s;

Также, как и в других типах, значение по умолчанию равно 0. Мы также можем использовать для него все стандартные арифметические операции.

2.4. длинная

Наш последний примитивный тип данных, связанный с целыми числами, — long .

long — старший брат int . Он хранится в 64-битной памяти , поэтому может содержать значительно больший набор возможных значений.

Возможные значения long находятся в диапазоне от -9 223 372 036 854 775 808 (-2 ^63 ) до 9 223 372 036 854 775 807 (2 ^63 - 1).

Мы можем просто объявить один:

long l = 1_234_567_890;

long l;

Как и в случае с другими целочисленными типами, значение по умолчанию также равно 0. Мы можем использовать всю арифметику для long , которая работает для int .

2.5. плавать

Мы представляем основные дробные числа в Java, используя тип float . Это десятичное число одинарной точности. Это означает, что если мы преодолеем шесть знаков после запятой, число станет менее точным и больше приблизительным.

В большинстве случаев нас не волнует потеря точности. Но если наш расчет требует абсолютной точности (например, финансовые операции, высадка на Луну и т. д.), нам нужно использовать специальные типы, предназначенные для этой работы. Для получения дополнительной информации ознакомьтесь с классом Java Big Decimal .

Этот тип хранится в 32 битах памяти, как и int . Однако из-за плавающей десятичной точки его диапазон сильно отличается. Он может представлять как положительные, так и отрицательные числа. Наименьшее десятичное число равно 1,40239846 x 10 ^-45 , а наибольшее значение равно 3,40282347 x 10 ^38 .

Мы объявляем float так же, как и любой другой тип:

float f = 3.145f;

float f;

И значение по умолчанию — 0,0 вместо 0. Кроме того, обратите внимание, что мы добавляем обозначение f в конец литерального числа, чтобы определить число с плавающей запятой. В противном случае Java выдаст ошибку, поскольку тип десятичного значения по умолчанию — double .

Мы также можем выполнять все стандартные арифметические операции над числами с плавающей запятой . Однако важно отметить, что мы выполняем арифметику с плавающей запятой совершенно иначе, чем арифметику с целыми числами.

2.6. двойной

Далее мы смотрим на double . Его название происходит от того факта, что это десятичное число двойной точности.

Он хранится в 64-битной памяти. Это означает, что он представляет гораздо больший диапазон возможных чисел, чем float .

Хотя он страдает тем же ограничением точности, что и float . Диапазон составляет от 4,9406564584124654 x 10 ^-324 до 1,7976931348623157 x 10 ^308 . Этот диапазон также может быть положительным или отрицательным.

Объявление double аналогично другим числовым типам:

double d = 3.13457599923384753929348D;

double d;

Значение по умолчанию также равно 0.0, как и для float . Подобно float, мы добавляем букву D , чтобы обозначить литерал как двойной.

2.7. логический

Самый простой примитивный тип данных — логический . Он может содержать только два значения: true или false . Он хранит свое значение в одном бите.

Однако для удобства Java дополняет значение и сохраняет его в одном байте.

Вот как мы объявляем boolean :

boolean b = true;

boolean b;

Объявление его без значения по умолчанию равно false . boolean является краеугольным камнем управления потоком наших программ. Мы можем использовать над ними логические операторы (например, и , или и т. д.).

2.8. уголь

Последний примитивный тип данных, на который стоит обратить внимание, это char .

Также называемый символом, char представляет собой 16-разрядное целое число, представляющее символ в кодировке Unicode. Его диапазон составляет от 0 до 65 535. В Юникоде это представляет собой от '\u0000' до '\uffff' .

Список всех возможных значений Unicode можно найти на таких сайтах, как Unicode Table .

Давайте теперь объявим char :

char c = 'a';

char c = 65;

char c;

При определении наших переменных мы можем использовать любой символьный литерал, и они будут автоматически преобразованы для нас в свою кодировку Unicode. Значение символа по умолчанию — '/u0000' .

2.9. Переполнение

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

Мы сталкиваемся с ситуацией, называемой переполнением .

Когда целое число переполняется, оно возвращается к минимальному значению и начинает отсчет оттуда.

Числа с плавающей запятой переполняются, возвращая Infinity:

int i = Integer.MAX_VALUE;
int j = i + 1;
// j will roll over to -2_147_483_648

double d = Double.MAX_VALUE;
double o = d + 1;
// o will be Infinity

Опустошение — это та же проблема, за исключением того, что она связана с сохранением значения меньше минимального значения. Когда числа переполняются, они возвращают 0,0.

2.10. Автобокс

Каждый примитивный тип данных также имеет полную реализацию класса Java, которая может его обернуть. Например, класс Integer может обернуть int . Иногда возникает необходимость преобразовать примитивный тип в оболочку объекта (например, используя их с дженериками ).

К счастью, Java может выполнить это преобразование автоматически, процесс, называемый Autoboxing :

Character c = 'c';

Integer i = 1;

3. Заключение

В этой статье мы рассмотрели восемь примитивных типов данных, поддерживаемых в Java.

Это стандартные блоки, используемые большинством, если не всеми, Java-программами, поэтому стоит понять, как они работают.