что такое обертка в java
Классы-оболочки в Java — руководство с примерами
Классы-оболочки Java являются Объектным представлением восьми примитивных типов в Java. Все классы-оболочки в Java являются неизменными и final. Начиная с Java 5 автоупаковка и распаковка позволяет легко конвертировать примитивные типы в их соответствующие классы-оболочки и наоборот.
В таблице ниже показаны примитивные типы и их классы-обертки в Java
Примитивный тип | Класс-обертка | Аргументы |
byte | Byte | byte или String |
short | Short | short или String |
int | Integer | int или String |
long | Long | long или String |
float | Float | float, double или String |
double | Double | double или String |
char | Character | char |
boolean | Boolean | boolean или String |
Зачем нужны классы-оболочки в Java?
Разработчиками языка Java было принято очень умное решение отделить примитивные типы и классы-оболочки, указав при этом следующее:
Еще одним важным моментом является то, что примитивные типы не могут быть null, а классы-оболочки — могут.
Также классы-оболочки могут быть использованы для достижения полиморфизма.
Вот простая программа, показывающая различные аспекты классов-оболочек в Java :
Типы-обертки в Java
1. Список типов-оберток
Все вы знаете, что в Java есть 8 примитивных типов, которые не являются классами. С одной стороны, это хорошо: они простые и занимают мало места, а с другой — иногда нужны именно классы. Зачем именно они, вы узнаете в следующей лекции.
Вот список таких типов, ничего не узнаете?
Примитивный тип | Класс-обертка |
---|
Все объекты классов-оберток являются неизменяемыми ( immutable ).
Упрощенный код класса Integer выглядит примерно так:
Метод возвращает значение
Статический метод создает новый объект Integer для переменной типа int
2. Преобразование типа int к Integer
Типы-обертки считаются аналогами их более примитивных собратьев: можно легко создать соответствующий объект-обертку для примитивного типа.
Разберем взаимодействие примитивных типов и их типов-оберток на примере типа int. Вот как бы выглядел код преобразования типа int к типу Integer и наоборот:
3. Autoboxing и unboxing
Однако даже простые операции с типом Integer писать непросто.
Код | Описание |
---|---|
Оборачиваем 5 в класс Integer Получаем значение из объекта Integer Создаем новое значение Integer == 10 |
Код довольно громоздкий, не находите?
Ваш код | Что видит компилятор |
---|
Код | Что сгенерирует компилятор |
---|
4. Сравнение переменных классов-оберток
Код | Вывод на экран |
---|
Переменные a и b хранят не значения (как типы int ), а ссылки на объекты. Поэтому важно помнить, как правильно их сравнивать:
Класс обертки На Java | Примеры Автоматической Упаковки И Распаковки
В этой статье рассматривается класс-оболочка в java с эквивалентными объектами класса-оболочки примитивных типов данных с примерами автоматической упаковки и распаковки.
Автор оригинала: Waseem.
Язык программирования Java является одним из самых популярных языков программирования в настоящее время. С такими понятиями, как переменные, типы данных, классы и объекты, возникает еще одна важная концепция класса-оболочки в java, которая необходима для синхронизации в многопоточности, структуре сбора и т.д. В этой статье мы обсудим необходимость класса-оболочки в java на различных примерах. Ниже приведены концепции, обсуждаемые в этом блоге:
Что Такое Класс Java – Оболочки?
Класс-оболочка предоставляет механизм преобразования примитивных типов данных в объекты класса-оболочки. Ниже приведены эквивалентные объекты класса-оболочки примитивных типов данных.
Ниже приведен пример, показывающий, как можно создать объект класса java-оболочки.
В приведенной выше программе мы использовали класс-оболочку вместо примитивных типов данных.
Ниже приведены методы получения соответствующего значения из объектов-оболочек.
Ниже приведен пример использования этих методов в программе:
Аналогичным образом вы можете использовать другие методы, такие как double Value (), shortValue (), longValue (), byte Value (), чтобы получить соответствующие значения объектов класса-оболочки.
Потребность В Классе Java-Оболочки
Автобокс
Автобокс-это автоматическое преобразование примитивных типов данных в объекты соответствующего класса-оболочки.
Распаковка
Это обратная сторона автобокса, когда объект класса-оболочки преобразуется в соответствующий примитивный тип данных.
В этой статье мы обсудили класс-оболочку в java, который помогает преобразовывать примитивные типы данных в соответствующие им объекты. Это помогает в синхронизации во время многопоточности, а также в различных других приложениях. Java – универсальный язык с множеством эффективных и революционных концепций.
У вас есть к нам вопрос? Пожалуйста, упомяните об этом в разделе комментариев статьи “Класс-оболочка в Java”, и мы свяжемся с вами как можно скорее.
Классы Integer, Character, Boolean
Часто бывает предпочтительней работать с объектами, а не с примитивными типами. Так, например, при использовании коллекций, просто необходимо значения примитивных типов каким-то образом представлять в виде объектов. Для этих целей и предназначены так называемые классы-обертки (wrapper classes). Для каждого примитивного типа Java существует свой класс-обертки. Такой класс является неизменяемым, то есть, для изменения значения необходимо создавать новый объект. К тому же класс-обертка имеет атрибут final и его нельзя наследовать.
Все классы-обертки (кроме Void) реализуют интерфейс java.io.Serializable, поэтому объекты любого класса-обертки (кроме Void) могут быть сериализованы. Это имеет важное значение для «сетевых» пересылок объектов.
Примитивный тип | Класс-обертка |
---|---|
byte | Byte |
short | Short |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
Wrapper classes числовых типов (Byte, Short, Integer, Long, Float, Double) наследуются от класса Number, который содержит код, общий для всех классов-оберток числовых типов. Все классы-обертки реализуют интерфейс Comparable.
Классы-обертки числовых типов имеют метод equals(Object), сравнивающий примитивные значения объектов. Но с этим надо быть предельно внимательным. Так в результате выполнения следующего кода
мы увидим в консоли следующий текст :
Данный результат связан с тем, что во всех классах-обертках метод equals() сначала производит проверку на совпадение типов (классов), и если нет совпадения, то сразу же возвращает false. В JDK 1.3.1 для класса-обертки Integer метод equals() определен следующим образом :
Класс Number
Абстрактный класс Number является суперклассом для классов Byte, Double, Float, Integer, Long и Short. Наследники Number должны обеспечить методы преобразовывания числовых значений в byte, double, float, int, long и short.
Класс Number имеет один конструктор :
Методы класса Number :
Метод | Описание |
---|---|
byte byteValue() | преобразование значения в тип byte |
abstract double doubleValue() | преобразование значения в тип double |
abstract float floatValue() | преобразование значения в тип float |
abstract int intValue() | преобразование значения в тип int |
abstract long longValue() | преобразование значения в тип long |
short shortValue() | преобразование значения в тип short |
Класс Integer
Конструкторы класса Integer
Поля класса Integer
Наиболее значимые методы класса Integer
Метод | Описание |
---|---|
byte byteValue() | преобразование значения в тип byte |
int compareTo(Integer integer) | сравнение двух целых чисел |
int compareTo(Object o) | сравнение значения с другим объектом |
Integer decode(String nm) | перевод строки в Integer |
double doubleValue() | преобразование значения в тип double |
boolean equals(Object obj) | сравнение с другим объектом |
float floatValue() | преобразование значения в тип float |
int hashCode() | получение hashcode для обьекта |
int intValue() | преобразование значения в тип int |
long longValue() | преобразование значения в тип long |
int parseInt(String s) | преобразование текстового значения в тип int |
int parseInt(String s, int radix) | преобразование текстового значения со знаком в системе счисления, определенной во втором аргументе, в тип int |
short shortValue() | преобразование значения в тип short |
String toBinaryString(int i) | преобразование целочисленного значения i в текстовый вид с базой 2 (двоичный) |
String toHexString(int i) | преобразование целочисленного значения i в текстовый вид с базой 16(шестнадцатиричный) |
String toOctalString(int i) | преобразование целочисленного значения i в текстовый вид с базой 8(восьмиричный) |
String toString() | преобразование значения в тип String |
String toString(int i) | преобразование значения i в тип String |
String toString(int i, int radix) | преобразование целочисленного значения i в строку в заданной системе счисления radix |
Integer valueOf(String s) | создание объекта Integer, инициализированного величиной, определенной в строковой переменной s |
Integer valueOf(String s, int radix) | создание объекта Integer, инициализированного величиной, определенной в строковой переменной s, записанной в системе счисления radix |
Методы parseInt(), преобразующие текстовое значение в целочисленное, не следует путать с методами valueOf(), возвращающие класс-обертку. Если переданная на вход строка содержит нецифровые символы, то методы возбуждают исключение NumberFormatException.
Дополнительную информацию о классе Integer можно получить на странице Кэширование класса Integer
Класс Byte
Класс Byte является стандартной оболочкой для байтовых величин.
Конструкторы класса Byte
Поля класса Byte
Методы класса Byte
Метод | Описание |
---|---|
byte byteValue() | получение значения типа byte |
int compareTo(Byte byte) | сравнение с объектом Byte |
int compareTo(Object o) | сравнение с другим объектом |
static Byte decode(String nm) | преобразование строки в Byte |
double doubleValue() | преобразование значения в double |
boolean equals(Object obj) | проверка на равенство с другим объектом |
float floatValue() | преобразование значения в float |
int hashCode() | получение hash-кода объекта |
int intValue() | преобразование значения в int |
long longValue() | преобразование значения в long |
static byte parseByte(String s) | преобразование текстового значения в byte |
static byte parseByte(String s, int radix) | преобразование текстового значения в системе счисления radix в байт |
short shortValue() | преобразование значения в short |
String toString() | преобразование значения в String |
static String toString(byte b) | преобразование байтового значения в String |
static Byte valueOf(String s) | преобразование текстового значения в Byte |
static Byte valueOf(String s, int radix) | преобразование текстового значения в системе счисления radix в Byte |
Класс Boolean
Класс Boolean является оболочкой простого логического объекта. Объект типа Boolean содержит единственное поле логического типа. Кроме того, этот класс включает методы преобразования boolean в String и обратно, а также константы и методы полезные при работе с логическим типом.
Конструкторы класса Boolean
Поля класса Boolean
Методы класса Boolean
Метод | Описание |
---|---|
boolean booleanValue() | получение логического значения |
boolean equals(Object obj) | функция возвращает логическое значение по результату сравнения переданного объекта с текущим |
static boolean getBoolean(String name) | преобразование текстового значения в логическое |
int hashCode() | получение hash-кода объекта |
String toString() | преобразование в текстовое значение |
static Boolean valueOf(String s) | преобразование текстового значения в Boolean |
Класс Void
Класс-обертка Void, в отличии от остальных, НЕ реализует интерфейс java.io.Serializable и не имеет открытого конструктора. Более того, экземпляр класса Void вообще не может быть получен. Он нужен только для получения ссылки на объект, соответствующий void. Эта ссылка представлена статической константой TYPE. Выражение void.class == Void.TYPE вернет «true».
Использовать Void можно, например, в случаях, когда имеется обобщенный класс (generic) и необходимо, чтобы метод ничего не возвращал :
Класс Character
Класс Character является оболочкой вокруг типа char. Чтобы получить значение типа char, содержащее в объекте Character, необходимо вызвать метод charValue().
Конструктор класса Character
Character имеет только один конструктор, которому в качестве параметра передается значение char.
Помимо констант MIN_VALUE и MAX_VALUE, Character содержит две константы MIN_RADIX и MAX_RADIX, которые равны минимальному и максимальному основанию системы счисления, которые используются методами (представленными ниже) для перевода отдельного цифрового символа в его целочисленный эквивалент и наоборот. Основание должно находиться в диапазоне 2–36; цифры свыше 9 представлены буквами от A до Z или их эквивалентами в нижнем регистре.
Pro Java
Страницы
4 мая 2015 г.
Классы-обертки для примитивных типов
Мы уже сталкивались с классами обертками (wrapper classes) для примитивных типов, но пока не заостряли на них внимание. Сейчас же мы рассмотрим их более подробно, чтобы понять что такое методы классов и что такое поля классов.
Как вы уже знаете, в Java для хранения базовых типов данных, поддерживаемых языком, используются примитивные типы (также называемые простыми типами), такие как int или double. Примитивные типы, в отличие от объектов, используются для таких значений из соображений производительности. Применение объектов для этих значений добавляет нежелательные накладные расходы, даже в случае простейших вычислений.
Несмотря на то что примитивные типы обеспечивают выигрыш производительности, бывают случаи, когда вам может понадобиться объектное представление. Например, вы не можете передать в метод примитивный тип по ссылке. Кроме того, многие из стандартных структур данных, реализованных в Java, оперируют с объектами, что означает, что вы не можете применять эти структуры данных для сохранения примитивных типов. Чтобы справиться с такими (и подобными) ситуациями, Java предлагает обертки примитивных типов, которые представляют собой классы, помещающие примитивный тип в объект.
Обертки для примитивных типов — это Double, Float, Long, Integer, Short, Byte, Character и Boolean. Эти классы предоставляют широкий диапазон методов, позволяющий в полной мере интегрировать примитивные типы в иерархию объектных типов Java.
И далее уже рассмотрим примеры работы с методами этих классов.
По существу мы много раз использовали поле length массива args, для поучения количества его элементов. Это один из примеров работы с полями объекта класса.
Примером работы с методами класса являются строки 11 и 13.
В 11 строке мы проверяем если первый аргумент командной строки является строкой true, то тогда переменной wBoolean присваивается значение true. В ином случае оно остается равным false, как было задано при инициализации.
Пример вывода этой программы представлен ниже.
Теперь небольшой пример использования класса Character:
В данном примере использован статический метод isDigit класса Character, для определения является ли элемент массива символом или числом.
Метод isDigit возвращает true, если переданный ему как параметр тип char является числом, во всех других случаях возвращается false.
Кроме того здесь еще так же использован оператор continue, который переводит цикл на следующую итерацию, если бы его не было, то вывод в строке 15 совершался бы даже тогда, когда проверяемое значение являлось бы числом.
Класс Charaster содержит множество полезных методов и полей. Все это можно узнать из оригинальной документации.
Вывод данной программы может быть таким (зависит от аргументов командной строки):
Ну и несколько примеров с классами обертками для числовых типов:
Тут просто показано использование некоторых статических методов классов Byte и Integer, а так же использование статических полей типа MAX_VALUE.
Статический метод parseInt преобразует строку в число типа int.
Статический метод bitCount подсчитывает количество битов равных единице в переданном, как аргумент числовом типе.
Кроме этих методов и полей, у классов-оберток есть еще множество других. Поэтому, если вам понадобятся какие-либо операции над этими типами, то посмотрите сперва в стандартной библиотеке.
Данная программа генерирует следующий вывод:
На этом я думаю с этой темой закончим. Цель была познакомиться с тем, что такое методы и поля классов. Хотя пока, может, это все ясности и не добавило, но на подкорку должно было осесть.
Далее будем рассматривать массивы и строки. Все они относятся к ссылочным типам данных Java и соответственно имеют свои поля и методы. То есть мы будем еще глубже знакомиться с тем что такое объекты и с чем их едят. И затем уже перейдем непосредственно к понятию класса.