Чим відрізняється Integer від int на Java?


248

Наприклад, чому ви можете зробити:

int n = 9;

Але ні:

Integer n = 9;

А ви можете:

Integer.parseInt("1");

Але ні:

int.parseInt("1");

35
integer - клас, int примітивний тип
Anycorn

24
Ви можете робити Integer n = 9;завдяки автобоксу (якщо ви не використовуєте дуже стару версію Java)
Alderath

Відповіді:


320

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

Integerце клас, що не відрізняється від будь-якого іншого мовою Java. Змінні типу Integerзберігають посилання на Integerоб'єкти, як і будь-який інший тип посилання (об'єкта). Integer.parseInt("1")- це виклик статичного методу parseIntз класу Integer(зауважте, що цей метод фактично повертає an, intа не an Integer).

Якщо бути більш конкретним, Integerце клас з одним полем типу int. Цей клас використовується там, де до вас потрібно intставитися як до будь-якого іншого об'єкта, наприклад, у загальних типах чи ситуаціях, коли вам потрібна зведеність.

Зауважте, що кожен примітивний тип Java має еквівалентний клас обгортки :

  • byte має Byte
  • short має Short
  • int має Integer
  • long має Long
  • boolean має Boolean
  • char має Character
  • float має Float
  • double має Double

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

З java 5 у нас є автобоксинг, і перетворення між примітивним і обгортковим класом відбувається автоматично. Однак остерігайтеся, оскільки це може спричинити непомітні помилки та продуктивність; чітке розуміння конверсій ніколи не зашкодить.


6
У C#всіх типах даних є "псевдоніми" і int.Parse()це має сенс (навіть якщо це насправді не так)
Vahid Amiri

22
@ VSG24 ... але це було питання Java, і це відповідь на Java. C#тут абсолютно не має значення.
Darkhogg

3
Хорошим прикладом може бути: Помилка компіляції: Список <int> Дійсний: Список <Integer>
хагай

Додаткові знання завжди приносять користь
відправте шарму

1
Мені подобається вивчати нові речі, особливо коли знання пов'язані з поточною темою. Спасибі Вагід.
Пол Олівер

30

Integer - це клас, а int - примітивний тип.

Читайте далі за цими посиланнями:


1
Я хочу зазначити, що я вважаю, що це ідеальна відповідь з двох причин: 1- Коротка та точна, пам'ятаючи аудиторію / запитувача 2- Надає вказівки для додаткових деталей, а не вкладає все це в текст відповіді Не всі на питання можна відповісти точно та стисло (на деякі потрібні набагато більше деталей та нюансів, щоб бути точними та повними), але я думаю, що всі відповіді повинні намагатися бути такими простими та прямими.
DRich

11
Хе, я думаю, що насправді навпаки. "int є примітивним типом" нічого не говорить вам, якщо ви не знаєте, що таке примітивний тип. (І якщо ви це зробите, ви вже дуже ймовірно знаєте різницю між int та Integer). І надсилати читача до двох посилань із позначкою "Посилання 1" та "Посилання 2" є досить не допомагаючими, особливо порівняно з цитуванням відповідних розділів.
Стів Беннетт

7

Integer - це майже просто обгортка для примітиву примітивного типу. Це дозволяє використовувати всі функції класу Integer, щоб полегшити вам життя.

Якщо ви новачок у Java, вам слід навчитися цінувати документацію на Java. Наприклад, все, що ви хочете знати про клас Integer , задокументовано докладно.

Це прямо з документації для класу Integer:

Клас Integer обгортає в об'єкті значення int примітивного типу. Об'єкт типу Integer містить одне поле, тип якого є int.


7
Це дещо пропускає суть. Наприклад, як Integerце клас, він може зберігатися в контейнерах (на відміну від примітивних типів).
Олівер Чарльворт

6

Змінна int містить ціле ціле значення, підписане 32 бітами. Цілий (з великим капіталом I) містить посилання на об'єкт (класу) типу Integer або на нуль.

Java автоматично переходить між ними; від Integer до int кожного разу, коли об'єкт Integer виникає як аргумент оператору int або присвоюється змінній int або значенню int присвоюється змінна Integer. Цей кастинг називається бокс / розпакування.

Якщо змінна Integer, що посилається на null, не є коробкою, явно або неявно, передається NullPointerException.

(У наведеному вище тексті термін "змінна" означає локальну змінну, поле чи параметр)


5

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


3

int - це примітивний тип, а не об'єкт. Це означає, що ніяких методів з цим немає. Integer - це об'єкт із методами (наприклад, parseInt).

З новою версією Java є функціонал для автоматичного боксу (та розпакування). Це означає, що компілятор вставить Integer.valueOf (int) або integer.intValue () там, де це потрібно. Це означає, що насправді можна писати

Integer n = 9;

що трактується як

Integer n = Integer.valueOf(9);

3

Integer - це клас обгортки / Object and int - примітивний тип. Ця різниця відіграє величезну роль, коли потрібно зберігати значення int у колекції, оскільки вони приймають як об'єкти лише значення (до jdk1.4). JDK5 далі, оскільки автобокс - це зовсім інша історія.


5
JDK5 + також приймає лише об'єкти; Просто автобокс дозволяє компілятору автоматично телефонувати Integer.valueOf(i)або Integer.intValue()вам. Collection<int>все одно не вийде. Тож це не зовсім інша історія - це та сама історія, лише з невеликим скороченням.
ішавіт

домовились. Вибачте, моє формулювання цього не відображає.
коса

3

У 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.


2

int- це примітивний тип, який представляє ціле число. тоді Integerяк об'єкт, який обгортає int. IntegerОб'єкт дає вам більше функцій, таких як перетворення в шістнадцятковому, рядки і т.д.

Ви також можете використовувати концепції OOP за допомогою Integer. Наприклад, ви можете використовувати Integer для дженериків (тобто ).Collection<Integer>


2

Це взято з Java: Повна довідка, Дев'яте видання

Для використання основних типів даних, підтримуваних мовою, Java використовує примітивні типи (їх також називають простими типами), наприклад, int або double . Для цих кількостей заради продуктивності використовуються примітивні типи , а не об'єкти . Використання об'єктів для цих значень додало б неприйнятні накладні витрати навіть на найпростіші обчислення. Таким чином, примітивні типи не є частиною ієрархії об'єктів , і вони не успадковують Об'єкт .

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

Класи обгортки безпосередньо пов'язані з функцією автобоксингу Java . Обгортки типу: Double, Float, Long, Integer, Short, Byte, Character та Boolean . Ці класи пропонують широкий спектр методів, які дозволяють повністю інтегрувати примітивні типи в ієрархію об’єктів Java.


1

Для оптимізації виконання Java-коду були додані int примітивні типи, включаючи floatі boolт.д., але вони приходять разом з класами обгортки, так що при необхідності ви можете перетворити їх і використовувати їх як стандартний об'єкт Java разом із багатьма утилітами, які входять до їх члена функції (такі як Integer.parseInt("1")).


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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.