Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пр _ Часть 1.rtf
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
2.23 Mб
Скачать

Булев тип

Булев тип представлен всего одним типом boolean, который может хранить всего два возможных значения – true и false. Величины именно этого типа получаются в результате операций сравнения.

Над булевыми аргументами можно производить следующие операции:

  • операции сравнения

    • ==, !=

  • логические операции

    • &&, || - вычисление по сокращённой схеме

    • &, | - вычисление по происходит по полной схеме

  • битовые операции [ну во всяком случае так они называются =) ]

    • ^, ! 

  • оператор с условием ? :

  • оператор конкатенации со строкой +

Классы-оболочки (Wrapper)

Классы-оболочки соответствуют элементарным типам данных языка Java. Эти классы представляют элементарные значения как объекты. Все классы-оболочки, кроме Character, имеют два конструктора - один принимает элементарное значение, а другой представление значения String. Например:

Integer i1 = new Integer(50);

Integer i2 = new Integer("50");

Конструкторы класса Character принимает элемент char type как аргумент:

Character c = new Character('A');

Объекты этого класса-оболочки неизменны, т. е. их значение, присвоенное однажды, не может быть изменено.

С версии 1.5 введён механизм autoboxing/auto-unboxing, благодаря которому теперь можно писать:

Integer integer = 5; // Раньше надо было Integer integer = new Integer(5);

int intValue= integer; // Раньше int intValue = integer.intValue();

Если рассматривать классы оболочки в качестве носителейменно значений, то между ними и примитивными типами существует 3 больших отличия.

  1. Сам объект класса и его хранимое значение - разные вещи, тогда как в примитивных - это одно и то же. Т.е. может существовать 2 различных объекта класса Integer со значением 12345, которые на == дадут false. Из этого могут быть неприятные ситуации, например: Integer i1 = 1234; Integer i2 = 1234; System.out.println(i1 < i2); // Нормально, false, используется auto-unboxing System.out.println(i1 > i2); // Нормально, false, используется auto-unboxing System.out.println(i1 == i2);// Ненормально, false, НЕ используется auto-unboxing, т.к. это классы, а для них == сравнивается по адресам. А они не равны.

  2. Классы-оболочки имеют на 1 значение больше, чем примитивные. Они могут быть равны null. И например следующий код даст NullPointerException: Integer i = null; System.out.println(i == 42); //Попытается распаковать i, а зря...

  3. Работа с классами-оболочками гораздо более дорогостоящая, т.к. для каждой арифметической операции приходится распаковывать класс-оболочку в примитивный типа, производить действия над этим типом, а потом снова запаковывать в класс.

Поэтому рекомендуется ипользовать везде примитивные типа, кроме случаев параметризации, где можно использовать только классы-оболочки, а не примитивные.

Метод valueOf() 

Все классы-оболочки (кроме Character) определяют статический метод valueOf(), который возвращает объекты класса, соответствующие элементарному значению, представленному аргументом String. Например:

Float f1 = Float.valueOf("1.5f");

Перегруженная форма этого метода принимает представление базы (двоичной, восьмеричной или шестнадцатеричной) первого аргумента как второй аргумент. Например:

Integer I = Integer.valueOf("10011110", 2);

Преобразование объектов-оболочек в элементарные типы 

Все числовые классы-оболочки имеют шесть методов, которые используются для преобразования числового объекта-оболочки в любой элементарный числовой тип: byteValuedoubleValuefloatValueintValuelongValue и shortValue. Например:

Integer i = new Integer(20);

byte b = i.byteValue();

Методы парсеров 

Существует шесть методов парсеров parseIntparseDoubleparseFloatparseLongparseByte и parseShort. Они принимают String как аргумент и преобразуют его в соответствующий примитив. Они генерируют исключение NumberFormatException, если строка (String) построена некорректно. Например:

double d = Double.parseDouble("4.23");

Он также может принять корень (базу) как второй аргумент:

int i = Integer.parseInt("10011110", 2);

Преобразование базы 

В классах-оболочках Integer и Long есть методы toBinaryString() и toOctalString(), которые преобразуют числа в базе 10 в другие базы. Например:

String s = Integer.toHexString(25);