Философия Java | страница 39
Особый случай: примитивные типы
Одна из групп типов, часто применяемых при программировании, требует особого обращения. Их можно назвать «примитивными» типами (табл. 2.1). Причина для особого обращения состоит в том, что создание объекта с помощью new — особенно маленькой простой переменной — недостаточно эффективно, так как new помещает объекты в кучу. В таких случаях Java следует примеру языков С и С++. То есть вместо создания переменной с помощью new создается «автоматическая» переменная, не являющаяся ссылкой. Переменная напрямую хранит значение и располагается в стеке, так что операции с ней гораздо производительнее.
В Java размеры всех примитивных типов жестко фиксированы. Они не меняются с переходом на иную машинную архитектуру, как это происходит во многих других языках. Незыблемость размера — одна из причин улучшенной переносимости Java-nporpaMM.
Таблица 2.1. Примитивные типы
Примитивный тип
Размер, бит
Минимум
Максимум
Тип упаковки
boolean (логические значения)
—
—
—
Boolean
char (символьные значения)
16 .
Unicode 0
Unicode 2>16-
■1 Character
byte (байт)
8
-128
+127
Byte
short (короткое целое)
16
-2>15
+2>15-1
Short
int (целое)
32
-2>31
+2>31-1
Integer
long (длинное целое)
64
-2>63
+2>б3-1
Long
float (число.с плавающей запятой)
32
IEEE754
IEEE754
Float
double (число с повышенной
64
IEEE754
IEEE754
Double
точностью)
Void («пустое» значение)
—
—
—
Void
Все числовые значения являются знаковыми, так что не ищите слова unsigned.
Размер типа boolean явно не определяется; указывается лишь то, что этот тип может принимать значения true и false.
«Классы-обертки» позволяют создать в куче не-примитивный объект для представления примитивного типа. Например:
char с = 'х*,
Character ch = new Character(c),
Также можно использовать такой синтаксис:
Character ch = new CharacterC'x');
Механизм автоматической упаковки Java SE5 автоматически преобразует примитивный тип в объектную «обертку»:
Character ch = 'х'; и обратно:
char с = ch;
Причины создания подобных конструкций будут объяснены в последующих главах.
Числа повышенной точности
В Java существует два класса для проведения арифметических операций повышенной точности: Biglnteger и BigDecimal. Хотя эти классы примерно подходят под определение «классов-оберток», ни один из них не имеет аналога среди примитивных типов.