29. Соб. Как примитивные типы приводятся к непримитивным аналогам? Как непримитивные типы приводятся к примитивным? Как сравниваются примитивные и непримитивные типы? Всегда ли создается новый объект при операции autoboxing? Как работает кэширование при операции autoboxing? Для каких типов и/или значений работает кэширование?
5. Як примітивні типи
приводяться до не примітивних аналогів?
Компілятор використовує метод valueOf() чтобы перетворити
примитивні типи у відповідні об’єкти.
int x = 3;
Integer y = Integer.valueOf(x);
6. Як непримитивні типи приводяться
до примітивних?
За допомогою методів intValue(), doubleValue(), …, Java-компілятор перетворює об’єкти у
відповідні примітиви:
Boolean b = Boolean.FALSE;
boolean a = b.booleanValue();
але:
Integer x = null; int y = x.intValue(); - вилетить
виняток java.lang.NullPointerException.
7. Як порівнюються примітивні
та не примітивні типи?
За допомогою «==» та equals() примітивний
та не примітивний типи порівнюються як примітиви за значенням.
---
Використання оператора порівняння == можливе і для об’єктів класів-обгорток якщо
значення, які вони містять є кешованими (від -128 до 127, true/false), інакше – порівняння значень об’єктів
класів –обгорток можливе за допомогою
методу equals()
або obj1.compareTo(obj2).
8. Чи завжди створюється
новий об’єкт
при операції autoboxing?
Ні. При автоупаковці значень від -128 до 127 та
бульових значень посиланню типу класу-обгортки присвоюються кешовані значення.
При виході за межі цих значень створюється новий об’єкт.
---
Новий об’єкт створюється також при створенні
екземпляру класу-обгортки за допомогою конструктора: Integer i = new Integer(5) (deprecated).
9. Як відбувається кешування при
операції autoboxing?
У Java 5 була представлена нова функція для
економії пам’яті та підвищення продуктивності для обробки об’єктів типу
Integer. Об’єкти Integer
кешуються внутрішньо та повторно використовуються через ті самі об’єкти, на які
посилаються.
Кешування стосується
значень у діапазоні від –128 до +127.
Кешування цілих чисел працює лише в autoboxing. Об’єкти не кешуються,
коли вони побудовані за допомогою конструктора.
10. Для яких типів і/або
значень виконується кешування?
Byte,
Short, Integer, Long:
від -128 до 127.
Character: від 0 до 127.
Boolean:
true/false.
Коментарі
Дописати коментар