Главная » Статьи » Java » Java Ranger Basic

День 3/21
Primitive Types
Primitive Types, boolean

В спецификации размер указан только для примитивных типов, причем для 7 из 8:

Целочислительные типы: byte (8 бит), short (16 бит), int (32 бит) и long (64 бит) – это знаковые типы, а также char (16 бит) – беззнаковый тип, значения которого 16-битные положительные числа, отображающие UTF-16 code units.
Типы с плавающей точкой: float (32 бит) и double (64 бит).
Тип boolean, имеющий два значения – true и false.

Во-первых, это сделано потому, что к boolean нет битового доступа в принципе, поэтому нам все равно, сколько он занимает. А во-вторых, в разные моменты времени, даже в одной JVM boolean может занимать разный объем – когда мы оперируем одним boolean, вполне возможно, что машине выгодно привести его к размеру машинного слова. Если у нее 64-битный процессор, то для него родным является 8-байтные структуры. И возможно, что для него удобно считать, что long 0 – это false, а long 1 – это true.
Если у объекта 100 булевских полей, то хотя процессору с байтом не так удобно оперировать, как с long, тем не менее чтобы не делать 100 полей по 8 байт, он может сделать 100 полей по байту.
В то же время, если собрать массив размером миллион boolean[1000000], то виртуальная машина может решить, что в принципе хватит одного бита. Поскольку в спецификации не указан размер, то, когда берут массив boolean на один миллион, вполне возможно, что на самом деле хранится массив байт на 125 тысяч – byte[125000], где в каждом байте 8 бит.

Literal

Литерал, с точки зрения языка программирования, – это когда мы напрямую в текст программы вбиваем значения. Например, в выражении boolean b = true литерал будет true. Или int x = 771, тут литерал – 771.
Целочисленные литералы можно записывать в 4 или 5 форматах:

int x = 10;
int y = 0x10; // в шестнадцатеричном формате
int z = 010; // в восьмеричном формате
int t = 0b10; // в двоичном формате

Infinity, -Infinity, NaN

В Java нельзя делить целые числа на ноль, мы в результате получим ArithmeticException. Но можно делить на ноль числа с плавающей точкой, так мы в результате получим Infinity, -Infinity, NaN:

double d = 1.0 / 0; // Infinity
double d = -1.0 / 0; // -Infinity
double d = 0.0 / 0; // NaN

Primitive wrapper class

Классы-обертки над примитивными типами выполняют две независимых функции.
Первая – бывает, что у нас есть некоторое число, которое нужно куда-то положить, но в то место можно класть только ссылочный тип (например, массив Object[]). Примитивы не являются потомками класса Object. Одна из чудовищных проблем в Java заключается в том, что generics работают только с ссылочными типами. Нельзя написать List, в некоторых языках можно, в C++ можно, а в Java – нельзя. В таком случае нужно от примитива прийти к ссылочному типу. Класс Integer – это класс, у которого есть поле, где лежит int.
Вторая роль – классы-обертки являются скопищем библиотечных методов. Например, в классе java.lang.Double куча статических методов.

В следующей теме мы рассмотрим: Memory in Java

Источник: http://becomejavasenior.com/courses/?utm_source=Java+Email+Courses&utm_campaign=aa710df388-JavaRangerBasicIntro&utm_medi
Категория: Java Ranger Basic | (06.10.2015) W
Просмотров: 349 | Теги: Basic, ranger, java | Рейтинг: 0.0/0
Всего комментариев: 0
avatar