2016-04-23 5 views
0

Я начинаю изучать Java, и у меня есть вопрос.Как отличать примитивные типы данных от дженериков в Java?

Примитивные типы данных создаются как любые объекты в Java? Я имею в виду, где-то в глубине есть класс, который называется Int. Generics - это шаблоны вроде как для создания новых типов данных, не так ли? В терминах соглашения мы должны положить их в угловые скобки, например <HugeInteger>.

+0

примитив не является объектом, поэтому вы не можете использовать его в общих целях ... вместо того, чтобы использовать Wrapper примитивных типов. –

ответ

1

Примитивные типы (например, int, double, float) не являются объектами. Они являются примитивными и иногда могут быть весьма раздражающими и не могут использоваться как Generics.

Для дженериков вам нужны объекты. Это будет Integer, Double, Float и тому подобное.

Кстати, нет класса под названием Int (с верхним регистром i), если вы его не объявили.

+0

И в чем преимущество использования общих Int, Double и т. Д. Над примитивами? –

+0

Нет никакого преимущества в том, что типы Integer, Double и т. Д. Имеют над типами примитивов типа int и double, за исключением того, что они могут использоваться там, где требуется ссылочный тип (тип, являющийся подклассом Object), как в Generics. Но примитивные типы имеют преимущество в эффективности и скорости по сравнению с типами в штучной упаковке типа Integer и т. Д. Единственный раз, когда вы будете использовать типы в штучной упаковке, - это когда вы хотите, чтобы примитивные типы вели себя как ссылочные типы, а не где-то еще. – Madhusudhan

0

Дженерики не предназначены для представления примитивов. Они предназначены для представления объектов (поскольку общие типы все распространяются не на Object).

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

DDHGeneric<Integer, Integer, Integer, Integer> t = new DDHGeneric<>(); 

Вот краткая выдержка из Why Use Generics?, найденной в Java Трассы:

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

Заслуга @Makoto

Для обучения больше, вы можете пройти через этот учебник: Restrictions on Generics

-1

Здравствуйте и добро пожаловать к переполнению стека. Прежде всего, нет классов для примитивных типов. Ну, есть Integer и Float и так далее, но это классы-обертки. Они просто содержат переменную int (или float). Дженерики полезны для вещей, где, например, у вас есть класс под названием Couple, который содержит два объекта, но вы не знаете, что. Они позволяют вам рассказать классу, что, когда вы создаете экземпляр вместо предварительного определения.

+0

О, и вам нужно использовать угловые скобки –

0

Не совсем обычные объекты создаются с использованием нового() по ключевому слову:

Object myObject = new Object(); 
Integer myInt = new Integer(5); 

Вызов нового() выделяет некоторый объем памяти на так называемой динамической памяти, для того, чтобы сохранить вновь определенный экземпляр. Каждый раз, когда вы вызываете свой экземпляр, JVM смотрит на адрес памяти, где он был сохранен.

С другой стороны, примитивы регистрируются в памяти во время компиляции. Давайте предположим, что у вас есть строка:

int i = 5; 

Хотя compliling программу, JVM (виртуальная машина Java) создает место для i переменной, помнит, где это пятно, и везде, где он хочет использовать значение i его берет его с этого места.Если другой примитив имеет то же значение (например, int y = 5), он присваивается тому же месту в памяти. Это означает, что примитивы хранятся по его значению.

Смежные вопросы