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.

Коментарі

Популярні дописи з цього блогу

27 Гугл 1 goto. Зарезервовані (ключові) слова. wait не в блоці synchronized. happens-before. BlockingQueue. Методи BlockingQueue

28. Соб 1. Какие приоритеты нитей бывают? Можно ли остановить нить, снизив ее приоритет до 0? Зачем нужен класс ThreadGroup? В какой группе нитей состоит main-thread? Что такое паттерн ThreadPool?

30. Соб-2 Как установить бит в единицу в битовой маске? Как установить бит в ноль в битовой маске? Как получить значение определенного бита в битовой маске? Что такое ленивое вычисление выражения? Чем отличается использование && и & для типа boolean?