В чем разница между Integer и int в Java?

Например, почему вы можете:

int n = 9;

Но не:

Integer n = 9;

И вы можете сделать:

Integer.parseInt("1");

Но не:

int.parseInt("1");

Ответ 1

int является примитивным типом. Переменные типа int сохраняют фактическое двоичное значение для целого числа, которое вы хотите представить. int.parseInt("1") не имеет смысла, потому что int не является классом и поэтому не имеет каких-либо методов.

Integer - это класс, отличный от любого другого на языке Java. Переменные типа Integer сохраняют ссылки на объекты Integer, как и на любой другой тип ссылки (объекта). Integer.parseInt("1") - вызов статического метода parseInt из класса Integer (обратите внимание, что этот метод фактически возвращает int, а не Integer).

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

Обратите внимание, что каждый примитивный тип в Java имеет эквивалентный класс-оболочку:

  • byte имеет byte
  • short имеет short
  • int имеет Integer
  • long имеет long
  • boolean имеет boolean
  • char имеет Character
  • float имеет float
  • double имеет double

Классы Wrapper наследуют класс Object, а примитив - нет. Поэтому его можно использовать в коллекциях с ссылкой на Object или с помощью Generics.

Так как java 5 имеет автобоксинг, а преобразование между примитивным и оболочным классами выполняется автоматически. Остерегайтесь, однако, поскольку это может ввести тонкие ошибки и проблемы с производительностью; явное о конверсиях никогда не болит.

Ответ 2

Integer - это класс, а int - это примитивный тип.

Читайте по этим ссылкам:

Ответ 3

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

Если вы новичок в Java, вы должны научиться ценить документацию по Java. Например, все, что вы хотите знать о классе Integer, подробно описано в документации.

Это прямо из документации для класса Integer:

Класс Integer оборачивает значение примитивного типа int в объект. Объект типа Integer содержит одно поле, тип которого int.

Ответ 4

Переменная int содержит 32-значное целое число со знаком. Целое число (с капиталом I) содержит ссылку на объект типа (класса) Integer или null.

Java автоматически отбрасывает между ними; от Integer до int всякий раз, когда объект Integer возникает как аргумент для оператора int или присваивается переменной int, или значение int присваивается переменной Integer. Это литье называется бокс/распаковка.

Если переменная Integer, ссылающаяся на null, распаковывается, явно или неявно, генерируется исключение NullPointerException.

(В приведенном выше тексте термин "переменная" означает локальную переменную, поле или параметр)

Ответ 5

Integer относится к типу-оболочке в Java, тогда как int является примитивным типом. Все, кроме примитивных типов данных в Java, реализовано так же, как объекты, которые подразумевают, что Java является высококвалифицированным чисто объектно-ориентированным языком программирования. Если вам нужно, все типы примитивов также доступны в виде типов-оболочек в Java. Вы можете получить некоторое преимущество в производительности с примитивными типами, и, следовательно, типы-оболочки должны использоваться только тогда, когда это необходимо.

В вашем примере, как показано ниже.

Integer n = 9;

константа 9 является auto-boxed (auto-boxing и unboxing происходит автоматически с java 5 и далее) до Integer, и поэтому вы можете использовать такой оператор, а также Integer n = new Integer(9). Это фактически достигается с помощью выражения Integer.valueOf(9).intValue();

Ответ 6

int является примитивным типом, а не объектом. Это означает, что с ним не связаны никакие методы. Целое - это объект с методами (например, parseInt).

С более новой java есть функциональность для автоматического бокса (и распаковки). Это означает, что компилятор будет вставлять Integer.valueOf(int) или integer.intValue() там, где это необходимо. Это означает, что на самом деле можно написать

Integer n = 9;

который интерпретируется как

Integer n = Integer.valueOf(9);

Ответ 7

Integer - это класс-оболочка/объект, а int - примитивный тип. Эта разница играет огромную роль, когда вы хотите хранить int-значения в коллекции, потому что они принимают только объекты в качестве значений (до jdk1.4). JDK5 и далее из-за autoboxing это совершенно другая история.

Ответ 8

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

Вы также можете использовать концепции ООП с помощью Integer. Например, вы можете использовать Integer для дженериков (т.е. Collection<Integer>).

Ответ 9

В Java int является примитивным типом данных, в то время как Integer является классом Helper, он используется для преобразования одного типа данных в другой.

Например:

         double doubleValue = 156.5d;
         Double doubleObject  = new Double(doubleValue);
         Byte myByteValue = doubleObject.byteValue ();
         String myStringValue = doubleObject.toString();

Примитивные типы данных хранят самую быструю доступную память, где класс Helper является сложным и хранится в памяти кучи.

ссылка на Java Essential Training "David Gassner".

Ответ 10

Это взято из Java: полный справочник, девятое издание

Java использует примитивные типы (также называемые простыми типами), такие как int или double, для хранения основных типов данных, поддерживаемых языком. Примитивные типы, а не объекты, используются для этих количеств ради производительности. Использование объектов для этих значений добавит неприемлемые издержки даже для самых простых вычислений. Таким образом, примитивные типы не являются частью иерархии объектов и не наследуют Object.

Несмотря на выигрыш в производительности, предлагаемый примитивными типами, бывают моменты, когда вам необходимо представление объекта. Например, вы не можете передать примитивный тип по ссылке на метод. Кроме того, многие из стандартных структур данных, реализованных в Java, работают с объектами, что означает, что вы не можете использовать эти (объектно-ориентированные) структуры данных для хранения примитивных типов. Для обработки этих (и других) ситуаций Java предоставляет оболочки типов, которые являются классами, инкапсулирующими примитивный тип в объекте.

Классы Wrapper напрямую связаны с функцией автобоксинга в Javas. Типы-оболочки: Double, Float, Long, Integer, Short, Byte, Character и Boolean. Эти классы предлагают широкий спектр методов, которые позволяют полностью интегрировать примитивные типы в иерархию объектов Javas.

Ответ 11

Чтобы оптимизировать время выполнения кода Java, добавлен int примитивный тип (ы), включая float, bool и т.д. но они приходят с классами обертки, чтобы при необходимости вы могли конвертировать и использовать их в качестве стандартного объекта Java вместе со многими утилитами, которые входят в их состав функции (например, Integer.parseInt("1")).

Ответ 12

int является примитивным типом данных, а Integer является ссылочным или Wrapper Type (Class) в Java.

после java 1.5, которые вводят понятие autoboxing и unboxing, вы можете инициализировать как int, так и Integer, как это.

int a= 9
Integer a = 9 // both valid After Java 1.5.

почему Integer.parseInt("1");, но не int.parseInt("1");??

Integer - это класс, определенный в библиотеке jdk, а parseInt() - это статический метод, относящийся к Integer Class

Итак, Integer.parseInt("1"); возможно в java. но int - это примитивный тип (предположим как ключевое слово) в java. Таким образом, вы не можете вызвать parseInt() с помощью int.

Ответ 13

Примитивные типы намного быстрее и требуют гораздо меньше памяти. Поэтому мы могли бы предпочесть использовать их.

С другой стороны, текущая спецификация языка Java не позволяет использовать примитивные типы в параметризованных типах (обобщенных типах), в коллекциях Java или Reflection API.

Когда нашему приложению нужны коллекции с большим количеством элементов, мы должны рассмотреть возможность использования массивов с как можно более "экономичным" типом, как это показано на графике выше.

* Для получения подробной информации см. Источник: https://www.baeldung.com/java-primitives-vs-objects