Типы данных

From AsIsWiki
Jump to: navigation, search
Форум

Назад | Оглавление | Дальше


Contents

Числа: byte, short, int, long, float, double

Целочисленные типы
Тип Размер, байт Диапазон
byte 1 -128 ... 127
short 2 -32768 ... 32767
int 4 -2147483648 ... 2147483647
long 8 -9223372036854775808 ... 9223372036854775807
Числа с плавающей точкой
Тип Размер, байт Диапазон
float 4 ±3.40282347E+38F
double 8 ±1.7976931348623157E+308D

Длинные целые числа имеют суффикс L: 40000000L

Шестнадцатеричные числа имеют префикс 0x: 0xCAFE

Восьмеричные числа имеют префикс 0: 010 - это число 8

В Java нет беззнаковых типов unsigned.

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

Числа float имеют суффикс F: 3.402F

Числа double имеют суффикс D, или не имеют его вообще: 3.402D или 3.402

Числа с плавающей точкой в шестнадцатеричном формате: 0x1.0p-3 (десятичное 0,125). Для указания степени вместо "e" используется "p".

Все действия с вещественными числами соответствуют стандарту IEEE 754.

В Java есть три специальных значения с плавающей точкой:

  • положительная бесконечность;
  • отрицательная бесконечность;
  • NaN (не число)

Эти значения используются для обозначения переполнения и ошибок:

  • +3 / 0 = положительная бесконечность
  • 0 / 0 = NaN
  • Math.sqrt(-3) = NaN

В Java имеются константы:

Double.POSITIVE_INFINITY, Float.POSITIVE_INFINITY

Double.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY

Double.NaN, Float.NaN

Эти константы нельзя использовать для непосредственного сравнения с результатом вычислений, так как все величины "не являющиеся числами" считаются разными. Например, нельзя выполнить проверку:

if (x == Double.NaN)  // так нельзя проверить, является ли результат числом

Для таких случаев используются специальные методы:

if (Double.isNaN(x))  // такая проверка допустима

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

System.out.println(2.0 - 1.1)  // результат: 0.8999999999999999

Подобные ошибки связаны с внутренним двоичным представлением чисел. Подобно тому, как в десятичной системе нельзя точно представить результат 1/3, так и в двоичной системе невозможно точно представить 1/10. Для исключения ошибок округления следует использовать класс BigDecimal.


Символы: char

Тип char описывает кодовую страницу UTF-16.

Не следует путать символ 'A' со строкой "A".

Кодовые единицы Unicode можно выражать в hex-формате: \u2122 (символ "TM"), \u03C0 (буква Pi).

Последовательности, начинающиеся с \u можно указывать за пределами символьных констант или строк:

public static void main(String\u005B\u005D args)
Специальные символы
Символ Описание Значение Unicode
\b Возврат на одну позицию \u0008
\t Табуляция \u0009
\n Переход на новую строку \u000a
\r Возврат каретки \u000d
\" Двойная кавычка \u0022
\' Одинарная кавычка \u0027
\\ Обратная косая черта \u005c

В приложении или java-аплете можно использовать любой Unicode-символ, однако его отображение будет зависеть от вашего браузера и операционной системы.

В настоящее время 16-битового типа char недостаточно для описания всех символов Unicode.

Code point (кодовая точка) - значение, связанное с символом в схеме кодирования.

Кодовые точки записываются в hex-формате и имеют префикс U+: U+0041 ('A')

Кодовые точки объединяются в 17 кодовых плоскостей (code plane).

Basic multilingual plane (основная многоязыковая плоскость) - первая кодовая плоскость, состоящая из "классических" символов Unicode с кодовыми точками от U+0000 до U+FFFF.

Шестнадцать дополнительных плоскостей с кодовыми точками U+10000 ... U+10FFFF содержат дополнительные символы (supplementary character).

В UTF-16 символы из основной многоязыковой плоскости представляются 16-битовыми значениями, называемыми кодовыми единицами (code unit).

Дополнительные символы обозначаются последовательными парами кодовых единиц. Кажде из значений пары попадает на используемую 2048-байтовую область основной многоязыковой плоскости, называемой областью подстановки (surrogates area); от U+D800 до U+DBFF для первой кодовой единицы и от U+DC00 до U+DFFF для второй кодовой единицы. Такой подход позволяет сразу определить, соответствует ли значение коду конкретного символа или является ли частью кода дополнительного символа. Например, символу множества целых чисел соответствут кодовая точка U+1D56B и две кодовых единицы: U+D835 и U+DD6B.

Алгоритм кодирования описан здесь: UTF 16


Логические значения: boolean

Для типа boolean предусмотрено два значения: true и false.

В отличие от C++, в Java невозможны преобразования между логическими и целочисленными переменными.



Форум

Назад | Оглавление | Дальше

Personal tools
Namespaces

Variants
Actions
Navigation
Tools