Например, почему вы можете сделать:
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 имеет Byteshort имеет Shortint имеет Integerlong имеет Longboolean имеет Booleanchar имеет Characterfloat имеет Floatdouble имеет 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.