| Главная » Статьи » 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 Вторая роль – классы-обертки являются скопищем библиотечных методов. Например, в классе java.lang.Double куча статических методов. В следующей теме мы рассмотрим: Memory in Java Источник: http://becomejavasenior.com/courses/?utm_source=Java+Email+Courses&utm_campaign=aa710df388-JavaRangerBasicIntro&utm_medi | |
| Просмотров: 349 | | |
| Всего комментариев: 0 | |