Например, почему вы можете сделать:
int n = 9;
Но нет:
Integer n = 9;
И вы можете сделать:
Integer.parseInt("1");
Но нет:
int.parseInt("1");
Integer n = 9;
из-за автобокса (если вы не используете очень старую версию Java)
Например, почему вы можете сделать:
int n = 9;
Но нет:
Integer n = 9;
И вы можете сделать:
Integer.parseInt("1");
Но нет:
int.parseInt("1");
Integer n = 9;
из-за автобокса (если вы не используете очень старую версию Java)
Ответы:
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 у нас есть автобокс, и преобразование между примитивом и классом-оберткой выполняется автоматически. Однако будьте осторожны, так как это может привести к незначительным ошибкам и проблемам с производительностью; Быть откровенным о преобразованиях никогда не повредит.
C#
всех типах данных есть «псевдонимы», и int.Parse()
они имеют смысл (хотя на самом деле это не так)
C#
совершенно не имеет значения здесь.
Integer - это просто оболочка для примитивного типа int. Он позволяет вам использовать все функции класса Integer, чтобы облегчить вам жизнь.
Если вы новичок в Java, вы должны научиться ценить документацию по Java. Например, все, что вы хотите знать о классе Integer, подробно описано в документации.
Это прямо из документации для класса Integer:
Класс Integer оборачивает значение примитивного типа int в объект. Объект типа Integer содержит одно поле, тип которого int.
Integer
и класс, он может храниться в контейнерах (в отличие от примитивных типов).
Переменная int содержит 32-разрядное целое число со знаком. Integer (с заглавной I) содержит ссылку на объект (класса) типа Integer или на ноль.
Java автоматически приводит между ними; от Integer до int всякий раз, когда объект Integer встречается в качестве аргумента оператора int или назначается переменной int, или значение int присваивается переменной Integer. Этот кастинг называется бокс / распаковка.
Если целочисленная переменная, ссылающаяся на null, является явной или неявной, без нее, создается исключение NullPointerException.
(В приведенном выше тексте термин «переменная» означает локальную переменную, поле или параметр)
Integer
ссылается на тип оболочки в Java, тогда как int
является примитивным типом. Все, кроме примитивных типов данных в Java, реализовано так же, как объекты, которые подразумевают, что Java является высококвалифицированным чисто объектно-ориентированным языком программирования. Если вам нужно, все типы примитивов также доступны как типы-оболочки в Java. Вы можете получить некоторое преимущество в производительности с примитивными типами, и, следовательно, типы-обертки должны использоваться только тогда, когда это необходимо.
В вашем примере, как показано ниже.
Integer n = 9;
постоянная 9
в настоящее время автоматически в штучной упаковке ( auto-boxing
и unboxing
происходит автоматически и java 5
далее) , чтобы Integer
и , следовательно , вы можете использовать оператор , как это и также Integer n = new Integer(9)
. Это на самом деле достигается с помощью заявленияInteger.valueOf(9).intValue();
int является примитивным типом, а не объектом. Это означает, что нет никаких методов, связанных с этим. Integer - это объект с методами (например, parseInt).
С более новой Java есть функциональность для автоматического бокса (и распаковки). Это означает, что компилятор вставит Integer.valueOf (int) или integer.intValue (), где это необходимо. Это означает, что на самом деле можно написать
Integer n = 9;
который интерпретируется как
Integer n = Integer.valueOf(9);
Integer - это класс-обертка / Object, а int - примитивный тип. Эта разница играет огромную роль, когда вы хотите сохранить значения int в коллекции, потому что они принимают только объекты в качестве значений (до jdk1.4). JDK5 и дальше из-за автобокса это совсем другая история.
Integer.valueOf(i)
или Integer.intValue()
для вас. Collection<int>
все равно не будет работать. Так что это не совсем другая история - это та же самая история, с небольшим сокращением.
В 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.
int
примитивный тип, представляющий целое число в то время Integer
как объект, который оборачивает int
. Integer
Объект дает вам больше функций, таких как преобразование в шестнадцатеричном, строки и т.д.
Вы также можете использовать концепции ООП с Integer
. Например, вы можете использовать Integer для обобщений (то есть ).Collection
<Integer>
Это взято из Java: полный справочник, девятое издание
Java использует примитивные типы (также называемые простыми типами), такие как int или double , для хранения основных типов данных, поддерживаемых языком. Примитивные типы , а не объекты, используются для этих количеств ради производительности . Использование объектов для этих значений добавило бы неприемлемые издержки даже для самых простых вычислений. Таким образом, примитивные типы не являются частью иерархии объектов и не наследуют Object .
Несмотря на выигрыш в производительности, предлагаемый примитивными типами, бывают случаи, когда вам необходимо представление объекта. Например, вы не можете передать примитивный тип по ссылке на метод . Кроме того, многие из стандартных структур данных, реализованных в Java, работают с объектами, что означает, что вы не можете использовать эти (объектно-ориентированные) структуры данных для хранения примитивных типов . Для обработки этих (и других) ситуаций Java предоставляет оболочки типов, которые являются классами, инкапсулирующими примитивный тип в объекте.
Классы Wrapper напрямую связаны с функцией автобоксинга в Java . Типы обёрток: Double, Float, Long, Integer, Short, Byte, Character и Boolean . Эти классы предлагают широкий спектр методов, которые позволяют вам полностью интегрировать примитивные типы в иерархию объектов Java.
Чтобы оптимизировать время выполнения кода Java, были добавлены int
примитивные типы, в том числе float
и bool
т. Д., Но они поставляются вместе с классами-обертками, так что при необходимости вы можете конвертировать и использовать их в качестве стандартного объекта Java вместе со многими утилитами, входящими в их состав. функции (такие как Integer.parseInt("1")
).
int
является примитивным типом данных, в то время как Integer
является типом ссылки или типа оболочки (класса) в Java.
после java 1.5
чего вы можете ввести концепцию автобоксирования и распаковки, вы можете инициализировать оба int
или Integer
как это.
int a= 9
Integer a = 9 // both valid After Java 1.5.
почему
Integer.parseInt("1");
нетint.parseInt("1");
??
Integer
это класс, определенный в jdk
библиотеке, и parseInt()
это статический метод принадлежит Integer
классу
Итак, Integer.parseInt("1");
возможно в Java. но int
примитивный тип (предположим, как ключевое слово) в Java. Таким образом, вы не можете позвонить parseInt()
с int
.