Перетворення типів в java - vertex academy

Перетворення типів в java - vertex academy

  • написана командою Vertex Academy. Сподіваємося, що вона Вам буде корисна. Приємного прочитання!
  • це одна зі статей з нашого "Самовчителя по Java"

Перетворення типів - це тема, яка може здатися складною початківцям програмувати на Java. Однак, завіримо Вас, насправді все просто. Головне зрозуміти за якими законами відбувається взаємодія між змінними і пам'ятати про це при написанні програм. Отже, давайте розбиратися.







В Java існує 2 типу перетворень - картинка Вам на допомогу:

Перетворення типів в java - vertex academy

Нагадаємо, що вся "Всесвіт Java" складається з:

  • примітивних типів (byte, short, int, long, char, float, double, boolean)
  • об'єктів

У даній статті ми:

  • розглянемо перетворення типів для примітивних типів змінних
  • перетворення об'єктів (String, Scanner та ін.) в цій статті не розглядається, оскільки з об'єктами відбувається окрема «магія» - це тема для окремої статті.
автоматичне перетворення

Ну, що ж, давайте спробуємо розібратися що таке "автоматичне перетворення".

Пам'ятайте, коли ми розглядали типи змінних (в статті "Змінні в Java. Створення змінної"), ми говорили, що змінна - це певний «контейнер». в якому може зберігатися значення для подальшого використання в програмі. Також ми говорили про те, що кожен тип змінної має свій діапазон допустимих значень і обсяг займаної пам'яті. Ось вона табличка, де це все було розписано:

Перетворення типів в java - vertex academy

Так ось, до чого ми, власне кажучи, хилимо. До того, що зовсім не просто так Вам давалися діапазони допустимих значень і обсяг займаної пам'яті 🙂

Давайте, порівняємо, наприклад:

1. byte і short. byte має менший діапазон допустимих значень, ніж short. Тобто byte це як би коробочка поменше, а short - це коробочка побільше. І значить, ми можемо byte вкласти в short.

2. byte і int. byte має менший діапазон допустимих значень, ніж int. Тобто byte це як би коробочка поменше, а int - це коробочка побільше. І значить, ми можемо byte вкласти в int.

3. int і long. int має менший діапазон допустимих значень, ніж long. Тобто int це як би коробочка поменше, а long - це коробочка побільше. І значить, ми можемо int вкласти в long.







Перетворення типів в java - vertex academy

Це і є приклад автоматичного перетворення. Це можна схематично зобразити у вигляді ось такої картинки:

Перетворення типів в java - vertex academy

Давайте розглянемо як це працює на практиці.

Код №1 - якщо Ви запустите це код на своєму комп'ютері, в консолі буде виведено число 15

І-і-і? Ви думаєте, що раз в консоль було виведено одне і те ж число, і код №1 відрізняється від коду №2 всього лише типом змінної b, то між ними немає ніякої різниці? Це не так.

У коді №2 присутній автоматіческоепреобразованіе типів, а в коді №1 - немає:

Перетворення типів в java - vertex academy

Хоча число, в принципі, одне й те саме, але тепер воно перебуває в бо льшем контейнері, який займає більше місця на диску. При цьому, JVM виконує автоматичні перетворення за Вас. Вона знає, що int більше ніж byte.

Приведення типів

Інша справа якщо ви намагаєтеся перекласти щось з більшої контейнера в більш маленький.

Перетворення типів в java - vertex academy

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

Перетворення типів в java - vertex academy

Тому, ви повинні «прямо сказати», що ситуація під контролем:

На перетині напишіть: а - якщо перетворення відбувається автоматично, на - якщо потрібно використовувати явне перетворення, х - якщо перетворення неможливо.

* Приведення типу до самого себе називається тотожним - його прописувати не обов'язково

  1. Подивіться ще раз, який розмір має кожен примітивний тип. Спробуйте скласти блок-схему, яка показує, куди поміщаються які типи. Проведіть стрілочки з написом «розширює перетворення» і «звужує перетворення».

На співбесіді на посаду Junior Java Developer Вас можуть запитати:

Що Ви знаєте про перетворення примітивних типів даних, чи є втрата даних, чи можна перетворити логічний тип?

Спробуйте відповісти на питання.

Підсумуємо:
  • Якщо Ви "кладете" в більший контейнер вміст меншого контейнера », перетворення відбувається автоматично, і помилок виникати не повинно.

Перетворення типів в java - vertex academy

  • Якщо є необхідність покласти «значення з більшого контейнера в менший», потрібно бути обережним, і користуватися явним приведенням типів.

Перетворення типів в java - vertex academy

  • При приведенні float або double до цілочисельним типам, подрібнена частина не округляється, а просто відкидається.
  • Тип boolean не наводиться до жодного з типів.
  • Тип char приводиться до числовим типам, як код символу в системі UNICODE.
  • Якщо число більше свого контейнера, результат буде непередбачуваним.

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







Схожі статті