Іноді я бачу API, з допомогою longабо Longчи intабо Integer, і я не можу зрозуміти , як це прийнято рішення для цього?
Коли я повинен вибрати що?
Іноді я бачу API, з допомогою longабо Longчи intабо Integer, і я не можу зрозуміти , як це прийнято рішення для цього?
Коли я повинен вибрати що?
Відповіді:
Longє Objectформою longі Integerє об'єктною формою int.
longВикористовує 64 біт . Він intвикористовує 32 біти, і тому може містити лише до 2 мільярдів (-2 31 до +2 31 -1).
Ви повинні використовувати longі int, за винятком випадків, коли вам потрібно використовувати методи, успадковані від Objectтаких, як hashcode. Java.util.collectionsметоди зазвичай використовують коробчасті ( Object-загорнені) версії, оскільки їм потрібно працювати для будь-якого Object, а примітивний тип, як-от intабо long, не є Object.
Інша відмінність полягає в тому , що longі intє передача за значенням , в той час як Longі Integerє передача за посиланням значення , як і всі непрімітівние типів Java. Тож якби можна було змінити Longабо Integer(це не так, вони незмінні без використання коду JNI), була б ще одна причина використовувати один над іншим.
Остаточна різниця полягає в тому, що може бути Longабо Integerбути null.
Є кілька речей, які ви не можете зробити з примітивним типом:
nullзначенняObjectsЯкщо вам не потрібен будь-який із них, вам слід віддати перевагу примітивним типам, оскільки вони потребують меншої пам’яті.
int, коли тримаєте номери.intзанадто малий, використовуйте alonglongзанадто малий, використовуйтеBigIntegerCollectionобробку null, ...), використовуйте Integer/ Longзамість цьогоAn int- це 32-бітове ціле число; a long- це 64-бітове ціле число. Яку з них використовувати, залежить від того, наскільки великі цифри, які ви очікуєте працювати.
intі longє примітивними типами, тоді як Integerі Longє об'єктами. Первісні типи ефективніші, але іноді потрібно використовувати об’єкти; наприклад, класи колекцій в Java може працювати тільки з об'єктами, так що якщо вам потрібен список цілих чисел , ви повинні зробити це List<Integer>, наприклад , (ви не можете використовувати intв Listбезпосередньо).
Int32 bits (4byte)-2,147,483,648 to 2,147,483,647Long64 bits (8byte)-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
Якщо ваше використання змінної потрапляє в 32-бітовий діапазон, використовуйте Int, інакше використовуйте long. Зазвичай довгий використовується для наукових обчислень, і подібні речі потребують великої точності. (напр., значення pi).
Прикладом вибору одного над іншим є справа YouTube. Вони вперше визначили лічильник перегляду відео як
intпереповнений, коли було отримано більше 2,147,483,647 переглядів, які надійшли до популярного відео. ОскількиIntлічильник не може зберігати значення більше, ніж його діапазон, YouTube змінив лічильник на 64-бітну змінну і тепер може нараховувати до 9,223,372,036,854,775,807 переглядів. Зрозумійте свої дані та виберіть тип, який відповідає 64-бітовій змінній, і це займе подвійну пам'ять, ніж 32-бітну змінну.
Якщо мова йде про використання дуже довгого числа, яке може перевищувати 32 біти для представлення, ви можете використовувати довгі, щоб переконатися, що у вас не буде дивної поведінки.
З Java 5 ви можете використовувати функції боксу та поза боксу, щоб зробити використання int і Integer повністю однаковим. Це означає, що ви можете:
int myInt = new Integer(11);
Integer myInt2 = myInt;
І з боксу дозволяють перемикатися між міжнар і Integer без додаткової конвертації ( то ж саме для Long, Double, Shortтеж)
Ви можете використовувати intвесь час, але Integerмістить кілька допоміжних методів, які можуть допомогти вам зробити складні операції з цілими числами (наприклад, Integer.parseInt(String))
а) об'єкт Клас "Довгий" проти примітивного типу "довгий". (Принаймні на Java)
б) Існують різні (навіть незрозумілі) розміри пам'яті примітивних типів:
Java - все зрозуміло: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
C .. просто безлад: https://en.wikipedia.org/wiki/C_data_types