Программирование на Java
Шрифт:
Классы-обертки
Во многих случаях предпочтительней работать именно с объектами, а не с примитивными типами. Так, например, при использовании коллекций просто необходимо значения примитивных типов представлять в виде объектов.
Для этих целей и предназначены так называемые классы-обертки. Для каждого примитивного типа Java существует свой класс-обертка . Такой класс является неизменяемым (если необходим объект, хранящий другое значение, его нужно создать заново), к тому же имеет атрибут final – от него нельзя наследовать класс. Все классы-обертки (кроме Void ) реализуют интерфейс Serializable, поэтому объекты любого (кроме Void ) класса-обертки
Также классы-обертки содержат статические методы для обеспечения удобного манипулирования соответствующими примитивными типами, например, преобразование к строковому виду.
В таблице 13.1 приведены примитивные типы и соответствующие им классы-обертки.
Таблица 13.1. Примитивные типы и соответствующие им классы-обертки.
Класс-обертка | Примитивный тип |
---|---|
Byte | byte |
Short | short |
Character | char |
Integer | int |
Long | long |
Float | float |
Double | double |
Boolean | boolean |
При этом классы-обертки числовых типов Byte, Short, Integer, Long, Float, Double наследуются от одного класса – Number. В нем объявлены методы, возвращающие числовое значение во всех числовых форматах Java ( byte, short, int, long, float и double ).
Все классы-обертки реализуют интерфейс Comparable. Все классы-обертки числовых типов имеют метод equals(Object), сравнивающий примитивные значения объектов.
Рассмотрим более подробно некоторые из классов-оберток.
Integer
Наиболее часто используемые статические методы:
* public static int parseInt(String s) – преобразует строку, представляющую десятичную запись целого числа, в int ;
* public static int parseInt(String s, int radix) – преобразует строку, представляющую запись целого числа в системе счисления radix, в int.
Оба метода могут возбуждать исключение NumberFormatException, если строка, переданная на вход, содержит нецифровые символы.
Не следует путать эти методы с другой парой похожих методов:
public static Integer valueOf(String s)
public static Integer valueOf(String s, int radix)
Данные методы выполняют аналогичную работу, только результат представляют в виде объекта-обертки.
Существует также два конструктора для создания экземпляров класса Integer:
* Integer(String s) – конструктор, принимающий в качестве параметра строку, представляющую числовое значение.
* Integer(int i) –
конструктор, принимающий числовое значение.public static String toString(int i) – используется для преобразования значения типа int в строку.
Далее перечислены методы, преобразующие int в строковое восьмеричное, двоичное и шестнадцатеричное представление:
* public static String toOctalString(int i) – восьмеричное;
* public static String toBinaryString(int i) – двоичное;
* public static String toHexString(int i) – шестнадцатеричное.
Имеется также две статические константы:
* Integer.MIN_VALUE – минимальное int значение;
* Integer.MAX_VALUE – максимальное int значение.
Аналогичные константы, описывающие границы соответствующих типов, определены и для всех остальных классов-оберток числовых примитивных типов.
public int intValue возвращает значение примитивного типа для данного объекта Integer. Классы-обертки остальных примитивных целочисленных типов – Byte, Short, Long – содержат аналогичные методы и константы (определенные для соответствующих типов: byte, short, long ).
Рассмотрим пример:
public static void main(String[] args) {
int i = 1;
byte b = 1;
String value = "1000";
Integer iObj = new Integer(i);
Byte bObj = new Byte(b);
System.out.println("while i==b is " +
(i==b));
System.out.println("iObj.equals(bObj) is "
+ iObj.equals(bObj));
Long lObj = new Long(value);
System.out.println("lObj = " +
lObj.toString);
Long sum = new Long(lObj.longValue +
iObj.byteValue +
bObj.shortValue);
System.out.println("The sum = " +
sum.doubleValue);
}
В данном примере произвольным образом используются различные варианты классов-оберток и их методов. В результате выполнения на экран будет выведено следующее:
while i==b is true
iObj.equals(bObj) is false
lObj = 1000
The sum = 1002.0
Оставшиеся классы-обертки числовых типов Float и Double, помимо описанного для целочисленных примитивных типов, дополнительно содержат определения следующих констант (они подробно разбирались в лекции 4):
* NEGATIVE_INFINITY – отрицательная бесконечность;
* POSITIVE_INFINITY – положительная бесконечность;
* NaN – нечисловое значение.
Кроме того, другой смысл имеет значение MIN_VALUE – вместо наименьшего значения оно представляет минимальное положительное (строго > 0) значение, которое может быть представлено этим примитивным типом.
Кроме классов-оберток для примитивных числовых типов, таковые определены и для остальных примитивных типов Java.
Character
Реализует интерфейсы Comparable и Serializable.
Из конструкторов имеет только один, принимающий char в качестве параметра.
Кроме стандартных методов equals, hashCode, toString, содержит только два нестатических метода:
* public char charValue – возвращает обернутое значение char;
* public int compareTo(Character anotherCharacter) – сравнивает обернутые значения char как числа, то есть возвращает значение return this.value – anotherCharacter.value.