В чем разница между Integer и int в Java? - PullRequest
215 голосов
/ 29 декабря 2011

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

int n = 9;

Но не:

Integer n = 9;

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

Integer.parseInt("1");

Но не:

int.parseInt("1");

Ответы [ 12 ]

292 голосов
/ 29 декабря 2011

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

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

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

31 голосов
/ 29 декабря 2011

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

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

7 голосов
/ 29 декабря 2011

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

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

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

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

6 голосов
/ 26 ноября 2015

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

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

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

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

5 голосов
/ 29 декабря 2011

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();

3 голосов
/ 29 декабря 2011

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

3 голосов
/ 29 декабря 2011

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

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

Integer n = 9;

, что интерпретируется как

Integer n = Integer.valueOf(9);
2 голосов
/ 02 ноября 2017

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

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

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

Классы Wrapper имеют прямое отношение к Java Autoboxing особенность. Типы оберток: Double, Float, Long, Integer, Short, Байт, символ и логическое значение . Эти классы предлагают широкий спектр методы, которые позволяют полностью интегрировать примитивные типы в Иерархия объектов Java.

2 голосов
/ 28 февраля 2016

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

Например:

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

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

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

2 голосов
/ 29 декабря 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...