Подтвердить что ты не робот

Почему в java есть оболочка для каждого примитивного типа

Подклассы Number обертывают примитивные числовые типы (Byte, Integer, Double, Float, Long и Short).

Какую цель они выполняют?

4b9b3361

Ответ 1

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

Ответ 2

Поскольку обертки Objects.

  • Collections нужны объекты
  • Объекты могут быть instantiated равными null
  • Мы можем получить NullPointerException вместо странного поведения, если вы, например, создаете экземпляр -1 в примитиве
  • "Обертка" имеет удобный метод

Ответ 3

Многие ранние объектно-ориентированные языки (Smalltalk и т.д.) имеют общий "верхний тип" для всех значений, что упрощает определение общих операций, которые являются агностическими для тип значений, которые они перемещают.

Верхний тип теории типов, обычно сокращенный как верхний или нижний символ (⊤), является универсальным типом, который содержит все возможные объекты в интересующей вас системе типов.

Java не имеет такого верхнего типа, но Object является самым близким к нему. Наличие сопоставления из примитивных значений в экземплярах Object позволяет эффективно функционировать как верхний тип.

Средства основного языка java.lang.reflect используйте Object в качестве средства ожидания для верхнего типа - когда вы рефлексивно вызываете метод, который вы проходите в Object, и возвращаете Object.

Ответ 4

В соответствии с этой ссылкой java tutorial:

Есть три причины, по которым вы можете использовать объект Number, а не примитив:

  • В качестве аргумента метода, который ожидает объект (часто используется при манипулировании наборами чисел).
  • Использовать константы, определенные классом, такие как MIN_VALUE и MAX_VALUE, которые обеспечивают верхнюю и нижнюю границы типа данных.
  • Использовать методы класса для преобразования значений в и из других примитивных типов, для преобразования в строки и из строк, а также для преобразования между числовыми системами (десятичной, восьмеричной, шестнадцатеричной, двоичной).

Ответ 5

Дизайнеры Java по уважительным причинам или плохому - решили не основывать все типы на Object. Примитивные типы, такие как int, long, char и т.д., Не основаны на Object, и из-за этого они имеют довольно разную семантику, например, они передаются по значению, а не по ссылке.

Integer/long - это в основном просто классы-оболочки, чтобы примитивные типы вели себя как любой другой тип, чтобы иметь возможность использовать их в контекстах, где классы или объекты лучше подходят.

Например, из-за различий в семантике коллекции должны иметь две версии: одну для Object и одну для примитивных типов. Просто проще сделать одну версию коллекции и обернуть примитивные типы.

Ответ 6

Классы-оболочки в API Java в основном служат двум основным целям:

  • Чтобы примитивы включались в действия, зарезервированные для объектов, например, как добавляемые к коллекциям, или возвращались из метода с возвращаемым значением объекта.
  • Предоставление набора функций полезности для примитивов. Большинство из этих функций связаны с различными преобразованиями: преобразование примитивов в объекты String и из них, а также преобразование примитивов и объектов String в разные базы (или радиусы), например, двоичные, восьмеричные и шестнадцатеричные.

Ответ 7

Обработать их как объекты и поместить их в список, карты и т.д.

Ответ 8

Итак, мы можем добавлять примитивные типы данных в коллекции. Чтобы добавить элементы в коллекцию, они должны быть типа objects. Итак, были введены классы Wrapper, которые позволяют создавать объекты primitive data types.

Например:

Arraylist :   add(Object o) 

TreeSet:      add(Object o) 

Ответ 9

Лично я использую их как параметры для методов, поэтому мне не нужно беспокоиться о типе передаваемого числа. Тогда я могу использовать методы, такие как doubleValue(), чтобы получить значение и продолжать, не беспокоясь о что было передано.

Это основная причина когда-либо иметь базовый базовый класс.

Ответ 10

Существует определенный тип "указателя", который может указывать на любой тип (например, void в C/С++).

Я имею в виду java.lang.Object.

например. вы можете сделать это:

List<String> aList = new ArrayList<String>();  
Object o = aList;

НО, это недоступно для примитивов, т.е. для примитивов нет ссылочного типа void. То есть нет никакого способа примитивного типа ссылаться на какой-либо примитивный тип.

Итак, если вы хотите иметь алгоритм, который работает с произвольными переменными, вы можете использовать переменные типа java.lang.Object.
Если произвольные значения являются примитивами, используйте соответствующий объект Wrapper для их обертки и используйте ссылки java.lang.Object, чтобы манипулировать ими.

Вы также можете увидеть это в Collections

Ответ 11

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

Ответ 12

1st - чтобы java полностью объектно ориентировался.

2nd - мы не можем передавать примитивный тип ссылкой на метод, и многие стандартные структуры данных, реализованные java, работают с объектом: например (ArrayList, HashSet, HashMap и т.д.), поэтому им нужен этот объект referenc