Базовые типы данных Java
Переменная используется для выделения памяти для хранения значений. То есть при создании переменной необходимо выделить место в памяти.
Система управления памятью выделяет переменной область хранения в зависимости от её типа, и выделенное пространство можно использовать только для хранения данных этого типа.

Следовательно, определяя переменные разных типов, можно хранить в памяти целые числа, десятичные дроби или символы.
Два основных типа данных Java:
- Встроенные типы данных
- Ссылочные типы данных
Встроенные типы данных
Язык Java предоставляет восемь примитивных типов. Шесть числовых типов (четыре целочисленных типа, два типа с плавающей запятой), один символьный тип и один логический тип.
byte:
- Тип данных byte — это 8-битное знаковое целое число, представленное в дополнительном коде;
- Минимальное значение —-128(-2^7);
- Максимальное значение —127(2^7-1);
- Значение по умолчанию —0;
- Тип byte используется в больших массивах для экономии места, в основном вместо целых чисел, потому что переменная типа byte занимает лишь одну четверть пространства типа int;
- Пример: byte a = 100, byte b = -50.
short:
- Тип данных short — это 16-битное знаковое целое число, представленное в дополнительном коде;
- Минимальное значение —-32768(-2^15);
- Максимальное значение —32767(2^15 - 1);
- Тип данных short также может экономить место, как byte. Переменная типа short занимает половину объёма памяти, занимаемого переменной типа int;
- Значение по умолчанию —0;
- Пример: short s = 1000, short r = -20000.
int:
- Тип данных int — это 32-битное знаковое целое число, представленное в дополнительном коде;
- Минимальное значение —-2,147,483,648(-2^31);
- Максимальное значение —2,147,483,647(2^31 - 1);
- Как правило, целочисленные переменные по умолчанию имеют тип int;
- Значение по умолчанию —0 ;
- Пример: int a = 100000, int b = -200000.
long:
- Тип данных long — это 64-битное знаковое целое число, представленное в дополнительном коде;
- Минимальное значение —-9,223,372,036,854,775,808(-2^63);
- Максимальное значение —9,223,372,036,854,775,807(2^63 -1);
- Этот тип в основном используется в системах, где требуются относительно большие целые числа;
- Значение по умолчанию —0L;
- Пример:long a = 100000L,long b = -200000L。
Символ "L" теоретически нечувствителен к регистру, но если записать его как "l", его легко спутать с цифрой "1" и трудно различить. Поэтому лучше использовать заглавную букву.
float:
- Тип данных float — это 32-битное число с плавающей запятой одинарной точности, соответствующее стандарту IEEE 754;
- float позволяет экономить память при хранении больших массивов чисел с плавающей запятой;
- Значение по умолчанию —0.0f;
- Числа с плавающей запятой нельзя использовать для представления точных значений, таких как денежные суммы;
- Пример: float f1 = 234.5f.
double:
- Тип данных double — это 64-битное число с плавающей запятой двойной точности, соответствующее стандарту IEEE 754;
- Тип по умолчанию для чисел с плавающей запятой — double;
- Тип double также не может представлять точные значения, такие как денежные суммы;
- Значение по умолчанию —0.0d;
-
Пример:
double d1 = 7D ; double d2 = 7.; double d3 = 8.0; double d4 = 8.D; double d5 = 12.9867;
7 — это литерал int, а 7D, 7. и 8.0 — литералы double.
boolean:
- Тип данных boolean представляет один бит информации;
- Он имеет только два значения: true и false;
- Этот тип используется только как флаг для записи условий true/false;
- Значение по умолчанию —false;
- Пример: boolean one = true.
char:
- Тип char — это один 16-битный символ Unicode;
- Минимальное значение —\u0000(десятичный эквивалент равен 0);
- Максимальное значение —\uffff(i.e., 65535);
- Тип данных char может хранить любой символ;
- Пример: char letter = 'A';.
Пример
Для диапазонов значений числовых примитивных типов нам не нужно заучивать их наизусть, потому что их значения уже определены как константы в соответствующих классах-обёртках. См. пример ниже:
Пример
Запустить пример »
Компиляция приведённого выше кода даёт следующий вывод:
基本类型:byte 二进制位数:8 包装类:java.lang.Byte 最小值:Byte.MIN_VALUE=-128 最大值:Byte.MAX_VALUE=127 基本类型:short 二进制位数:16 包装类:java.lang.Short 最小值:Short.MIN_VALUE=-32768 最大值:Short.MAX_VALUE=32767 基本类型:int 二进制位数:32 包装类:java.lang.Integer 最小值:Integer.MIN_VALUE=-2147483648 最大值:Integer.MAX_VALUE=2147483647 基本类型:long 二进制位数:64 包装类:java.lang.Long 最小值:Long.MIN_VALUE=-9223372036854775808 最大值:Long.MAX_VALUE=9223372036854775807 基本类型:float 二进制位数:32 包装类:java.lang.Float 最小值:Float.MIN_VALUE=1.4E-45 最大值:Float.MAX_VALUE=3.4028235E38 基本类型:double 二进制位数:64 包装类:java.lang.Double 最小值:Double.MIN_VALUE=4.9E-324 最大值:Double.MAX_VALUE=1.7976931348623157E308 基本类型:char 二进制位数:16 包装类:java.lang.Character 最小值:Character.MIN_VALUE=0 最大值:Character.MAX_VALUE=65535
Минимальное и максимальное значения Float и Double выводятся в экспоненциальной форме. Завершающее "E+число" указывает, что число перед E нужно умножить на 10 в степени этого числа. Например, 3.14E3 — это 3.14 × 103=3140, а 3.14E-3 — это 3.14 x 10-3 =0.00314.
На самом деле, в Java есть ещё один примитивный тип — void, у которого также есть соответствующий класс-оболочка java.lang.Void, но мы не можем напрямую с ними работать.
Значения по умолчанию для типов
В следующей таблице перечислены значения по умолчанию для каждого типа Java:
| Тип данных | Значение по умолчанию |
|---|---|
| int | 0 |
| long | 0L |
| short | 0 |
| char | '\u0000' |
| байт | 0 |
| float | 0.0f |
| double | 0.0d |
| логическое значение | false |
| Ссылочные типы (классы, интерфейсы, массивы) | null |
Примечания:
int,short,long,byteЗначение по умолчанию равно 0.charЗначение по умолчанию —\u0000(нулевой символ).floatЗначение по умолчанию —0.0f。doubleЗначение по умолчанию —0.0d。booleanЗначение по умолчанию —false。- Значение по умолчанию для ссылочных типов (классов, интерфейсов, массивов) —
null。
Пример
Примеры вывода:
Bool :false Byte :0 Character: Double :0.0 Float :0.0 Integer :0 Long :0 Short :0 String :null
Ссылочные типы
- В Java переменные ссылочного типа очень похожи на указатели в C/C++. Ссылочный тип указывает на объект, а переменная, указывающая на объект, является ссылочной переменной. При объявлении эти переменные указываются как конкретный тип, например Employee, Puppy и т. д. После объявления переменной её тип нельзя изменить.
- Объекты и массивы являются ссылочными типами данных.
- Значение по умолчанию для всех ссылочных типов — null.
- Ссылочную переменную можно использовать для ссылки на любой совместимый тип.
- Пример: Site site = new Site("Example").
Константы Java
Константы нельзя изменять во время работы программы.
В Java ключевое слово final используется для определения констант. Способ объявления аналогичен переменным:
final double PI = 3.1415927;
Хотя имена констант также могут быть в нижнем регистре, для удобства идентификации для констант обычно используются заглавные буквы.
Литералы можно присваивать переменным любого встроенного типа. Например:
byte a = 68; char a = 'A'
byte, int, long и short могут быть представлены в десятичной, шестнадцатеричной и восьмеричной системах счисления.
При использовании литералов префикс0указывает на восьмеричную систему, а префикс0xобозначает шестнадцатеричную, например:
int decimal = 100; int octal = 0144; int hexa = 0x64;
Как и в других языках, строковые константы Java также представляют собой последовательности символов, заключённые между двумя кавычками. Ниже приведены примеры строковых литералов:
"Hello World" "two\nlines" "\"This is in quotes\""
И строковые константы, и символьные переменные могут содержать любые символы Unicode. Например:
char a = '\u0001'; String a = "\u0001";
Язык Java поддерживает некоторые специальные управляющие последовательности символов.
| Символ | Значение символа |
|---|---|
| \n | Новая строка (0x0a) |
| \r | Возврат каретки (0x0d) |
| \f | Подача страницы (0x0c) |
| \b | Возврат на шаг (0x08) |
| \0 | Нулевой символ (0x0) |
| \s | Пробел (0x20) |
| \t | Вкладка |
| \" | Двойная кавычка |
| \' | Одинарная кавычка |
| \\ | Обратная косая черта |
| \ddd | Восьмеричный символ (ddd) |
| \uxxxx | Шестнадцатеричный символ Unicode (xxxx) |
Автоматическое преобразование типов
Целочисленные, вещественные (константные) и символьные данные можно смешивать в операциях. Во время операций данные разных типов сначала преобразуются к одному типу, затем выполняется операция.
Преобразование идёт от низкого уровня к высокому.
低 ------------------------------------> 高 byte,short,char—> int —> long—> float —> double
Преобразование типов данных должно удовлетворять следующим правилам:
1. Преобразование типов нельзя выполнять для типа boolean.
-
2. Объектные типы нельзя преобразовывать в объекты несвязанных классов.
-
3. При преобразовании типа с большей ёмкостью к типу с меньшей ёмкостью необходимо использовать принудительное преобразование типа (cast).
-
4. Процесс преобразования может вызвать переполнение или потерю точности, например:
int i =128; byte b = (byte)i;
Поскольку тип byte занимает 8 бит и его максимальное значение равно 127, при принудительном преобразовании int в byte значение 128 вызовет переполнение.
-
5. Преобразование из числа с плавающей точкой в целое выполняется отбрасыванием дробной части, а не округлением, например:
(int)23.7 == 23; (int)-45.89f == -45
Автоматическое преобразование типов
Разрядность типа данных до преобразования должна быть меньше, чем у типа данных после преобразования. Например: тип short имеет 16 бит, поэтому он может автоматически преобразовываться в тип int с 32 битами; аналогично тип float имеет 32 бита и может автоматически преобразовываться в тип double с 64 битами.
Пример
Результат выполнения:
char自动类型转换为int后的值等于97 char类型和int计算后的值等于66
Анализ:Значение c1 — это символa, проверка таблицы ASCII показывает, что соответствующее значение int равно 97, а A соответствует 65, поэтомуi2=65+1=66。
Приведение типов
1. Условие: преобразуемые типы данных должны быть совместимы.
2. Формат: (type)value, где type — это тип данных после принудительного преобразования типа. Пример:
Пример
public class ForceTransform { public static void main(String[] args){ int i1 = 123; byte b = (byte)i1;//Принудительное преобразование типа к byte System.out.println("Значение после принудительного преобразования int к byte равно"+b); } }Результат выполнения:
int强制类型转换为byte后的值等于123
Неявное преобразование типов
1. По умолчанию целые числа имеют тип int.
2. Числа с плавающей точкой по умолчанию имеют тип double; при определении типа float нужно добавлять F или f после числа.
В этом разделе объяснялись основные типы данных Java. В следующем разделе будут рассмотрены различные типы переменных и их использование.
Другие расширения