Наприклад, чому ви можете зробити:
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
(зауважте, що цей метод фактично повертає 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 у нас є автобоксинг, і перетворення між примітивним і обгортковим класом відбувається автоматично. Однак остерігайтеся, оскільки це може спричинити непомітні помилки та продуктивність; чітке розуміння конверсій ніколи не зашкодить.
C#
всіх типах даних є "псевдоніми" і int.Parse()
це має сенс (навіть якщо це насправді не так)
C#
тут абсолютно не має значення.
Integer - це клас, а int - примітивний тип.
Читайте далі за цими посиланнями:
Integer - це майже просто обгортка для примітиву примітивного типу. Це дозволяє використовувати всі функції класу Integer, щоб полегшити вам життя.
Якщо ви новачок у Java, вам слід навчитися цінувати документацію на Java. Наприклад, все, що ви хочете знати про клас Integer , задокументовано докладно.
Це прямо з документації для класу Integer:
Клас Integer обгортає в об'єкті значення int примітивного типу. Об'єкт типу Integer містить одне поле, тип якого є int.
Integer
це клас, він може зберігатися в контейнерах (на відміну від примітивних типів).
Змінна int містить ціле ціле значення, підписане 32 бітами. Цілий (з великим капіталом I) містить посилання на об'єкт (класу) типу Integer або на нуль.
Java автоматично переходить між ними; від Integer до int кожного разу, коли об'єкт Integer виникає як аргумент оператору int або присвоюється змінній int або значенню int присвоюється змінна Integer. Цей кастинг називається бокс / розпакування.
Якщо змінна 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 and 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 складний, і зберігають у купі пам'яті.
посилання від "Девід Гасснер" Java Essential Training.
int
- це примітивний тип, який представляє ціле число. тоді Integer
як об'єкт, який обгортає int
. Integer
Об'єкт дає вам більше функцій, таких як перетворення в шістнадцятковому, рядки і т.д.
Ви також можете використовувати концепції OOP за допомогою Integer
. Наприклад, ви можете використовувати Integer для дженериків (тобто ).Collection
<Integer>
Це взято з Java: Повна довідка, Дев'яте видання
Для використання основних типів даних, підтримуваних мовою, Java використовує примітивні типи (їх також називають простими типами), наприклад, int або double . Для цих кількостей заради продуктивності використовуються примітивні типи , а не об'єкти . Використання об'єктів для цих значень додало б неприйнятні накладні витрати навіть на найпростіші обчислення. Таким чином, примітивні типи не є частиною ієрархії об'єктів , і вони не успадковують Об'єкт .
Незважаючи на перевагу від продуктивності, яку пропонують примітивні типи, є випадки, коли вам знадобиться представлення об'єкта. Наприклад, ви не можете передати примітивний тип за посиланням на метод . Крім того, багато стандартних структур даних, реалізованих Java, працюють на об'єктах, це означає, що ви не можете використовувати ці (специфічні для об'єкта) структури даних для зберігання примітивних типів . Для вирішення цих (та інших) ситуацій Java надає обгортки типу, які є класами, які інкапсулюють примітивний тип всередині об'єкта.
Класи обгортки безпосередньо пов'язані з функцією автобоксингу 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
.