Примитивных типов всего восемь. К ним относятся логический (иногда говорят булев) тип, называемый boolean, и семь числовых (numeric) типов.
Числовые типы делятся на целые (integral1) и вещественные (floating-point).
Целых типов пять: byte, short, int, long, char.
Символы можно применять везде, где используется тип int, поэтому JLS причисляет тип char к целым типам. Например, символы можно использовать в арифметических вычислениях, скажем, можно написать 2 + 'Ж', к двойке будет прибавляться кодировка Unicode '\u04i6' буквы 'Ж'. В десятичной форме это число 1046, и в результате сложения получим 1048.
Напомним, что в записи 2 + "Ж", где буква Ж записана как строка, в кавычках, плюс понимается как сцепление строк, двойка будет преобразована в строку, в результате получится строка "2Ж".
Вещественных типов всего два: float и double.
На рис. 1.2 показана иерархия типов данных Java.
| byte short int long char float doubleРис. 1.2. Типы данных языка Java |
Поскольку по имени переменной невозможно определить ее тип, все переменные обязательно должны быть описаны перед их использованием. Описание заключается в том, что записывается имя типа, затем через пробел список имен переменных, относящихся к этому типу. Имена в списке разделяются запятой. Для всех или некоторых переменных можно указать начальные значения после знака равенства, которыми могут служить любые константные выражения того же типа. Описание каждого типа завершается точкой с запятой. В программе может быть сколько угодно описаний каждого типа.
Замечание для специалистов
Java — язык со строгой типизацией (strongly typed language).
Разберем каждый тип подробнее.
Значения логического типа boolean возникают в результате различных сравнений, вроде 2 > 3, и используются главным образом в условных операторах и операторах циклов. Логических значений всего два: true (истина) и false (ложь). Это служебные слова Java. Описание переменных данного типа выглядит так:
boolean b = true, bb = false, bool2;
Над логическими данными можно выполнять операции присваивания, например bool2 = true, в том числе и составные с логическими операциями; сравнение на равенство b == bb и на неравенство b != bb, а также логические операции.
В языке Java реализованы четыре логические операции:
□ отрицание (NOT) — ! (обозначается восклицательным знаком);
□ конъюнкция (AND) — & (амперсанд);
□ дизъюнкция (OR) — | (вертикальная черта);
□ исключающее ИЛИ (XOR) — л (каре).
Они выполняются над логическими данными типа boolean, их результатом будет тоже логическое значение — true или false. Про эти операции можно ничего не знать, кроме того, что представлено в табл. 1.1.
| Таблица 1.1. Логические операции | |||||
|---|---|---|---|---|---|
| b1 | b2 | !b1 | b1 & b2 | b1 | b2 | b1 л b2 |
| true | true | false | true | true | false |
| true | false | false | false | true | true |
| false | true | true | false | true | true |
| false | false | true | false | false | false |
Словами эти правила можно выразить так:
□ отрицание меняет значение истинности;
□ конъюнкция истинна, только если оба операнда истинны;
□ дизъюнкция ложна, только если оба операнда ложны;
□ исключающее ИЛИ истинно, только если значения операндов различны.
ЗАМЕЧАНиЕ
Если бы Шекспир был программистом, фразу "To be or not to be" он написал бы так:
2b | ! 2b.
Кроме перечисленных четырех логических операций есть еще две логические операции сокращенного вычисления:
□ сокращенная конъюнкция (conditional-AND) — &&;
□ сокращенная дизъюнкция (conditional-OR) — | |.
Удвоенные знаки амперсанда и вертикальной черты следует записывать без пробелов.
Правый операнд сокращенных операций вычисляется только в том случае, если от него зависит результат операции, т. е. если левый операнд конъюнкции имеет значение true или левый операнд дизъюнкции имеет значение false.
Это правило очень удобно и довольно ловко используется программистами, например можно записывать выражения (n != 0) && (m/n > 0.001) или (n == 0) | | (m/n > 0.001), не опасаясь деления на нуль.
1
Название "integral" не является устоявшимся термином. Так названа категория целых типов данных в книге