1. Будова пам'яті
У кожного комп'ютера є оперативна пам'ять. Що ж це таке, які має властивості та, найголовніше, яка нам із цього користь?
Кожна програма (включно з програмами, написаними мовою Java) перед виконанням завантажується в оперативну пам'ять. В оперативній пам'яті містяться код програми (який виконується процесором) і дані програми (які в пам'ять поміщає сама програма).
Що ж таке оперативна пам'ять і на що вона схожа?
Уявіть собі Excel 😎 Сторінка в Exсel складається з клітинок (комірок), і кожна комірка має свій унікальний номер (A1
, A2
, ... B1
, B2
). Якщо знати номер комірки, завжди можна записати в неї якесь значення або ж отримати значення, що там зберігається. Пам'ять комп'ютера побудована за схожим принципом.
Під час роботи програма та її дані зберігаються в пам'яті. Уся пам'ять комп'ютера складається з маленьких комірок — байтів. Кожна комірка має свій унікальний номер — 0
, 1
, 2
, 3
, ...; (нумерація починається з нуля). Знаючи номер комірки, ми зможемо зберегти в ній певні дані. Або взяти їх із цієї комірки. В одних комірках зберігається код програми — набір команд для процесора, в інших — дані цієї програми. Номер комірки також називають адресою комірки.
Процесор уміє виконувати команди із завантаженої в пам'ять програми. Майже всі команди процесора — це щось на кшталт узяти з деяких комірок дані → щось із ними зробити → результат помістити в інші комірки.
Поєднуючи сотні простих команд, ми отримуємо складні та корисні команди.
Коли в коді програми відбувається оголошення змінної, їй виділяється шматочок іще не використаної пам'яті. Зазвичай це кілька байтів. Під час оголошення змінної обов'язково треба вказати тип інформації, яку програма буде зберігати в ній: числа, текст або інші дані. Адже якщо тип інформації невідомий, то незрозуміло, якого розміру блок пам'яті потрібно виділити для змінної.
На світанку комп'ютерної ери програми працювали просто з номерами комірок пам'яті, але потім для зручності коміркам почали надавати імена. Унікальне ім'я змінної створюється насамперед для полегшення життя програмістів: програма під час роботи чудово впоралася б і з номерами.
2. Змінні в пам'яті
Загалом у Java є 4 типи даних для зберігання цілих чисел. Це byte
, short
, int
і long
.
Тип | Розмір, байт | Походження імені |
---|---|---|
byte |
1 |
Byte, оскільки займає один байт пам'яті |
short |
2 |
Скорочення від Short Integer |
int |
4 |
Скорочення від Integer |
long |
8 |
Скорочення від Long Integer |
Також у Java є 2 дійсні типи — float і double:
Тип | Розмір, байт | Походження імені |
---|---|---|
float |
4 |
Скорочення від Floating Point Number |
double |
8 |
Скорочення від Double Float |
Щоразу, коли виконання програми доходить до команди створення змінної, цій змінній виділяється невелика область пам'яті (розмір області залежить від типу змінної).
Java-програмам заборонено звертатися безпосередньо до пам'яті. Уся робота з пам'яттю відбувається лише через Java-машину.
3. Тип String
у пам'яті
Тип String
може зберігати великі обсяги даних, тому це не просто тип даних, а повноцінний клас.
Дані типу String
(текст) поміщаються в спеціальний об'єкт, для якого виділяється пам'ять, а вже адреса цього об'єкта поміщається в змінну, для якої теж виділяється пам'ять.
Змінна a
типу int
займає 4
байти і зберігає значення 1
.
Змінна b
типу int
займає 4
байти і зберігає значення 10,555
. Кома тут не відокремлює дробову частину числа, а розділяє групи розрядів. Дробову частину відокремлюють крапкою.
Змінна d
типу double
займає 8
байтів та зберігає значення 13.001
.
Змінна str
типу String
займає 4
байти і зберігає значення G13
— адресу першої комірки об'єкта, який містить текст.
Об'єкт
типу String
(який містить текст) зберігається в окремому блоці пам'яті. Адреса його першої комірки зберігається в змінній str
.
4. Чому в програмуванні все нумерують починаючи з нуля
Люди часто дивуються, чому в програмуванні майже скрізь починають відлік з нуля. Річ у тім, що є дуже багато ситуацій, коли рахувати починаючи з нуля зручніше (хоча трапляються й такі ситуації, коли зручніше рахувати починаючи з 1
).
Найпростіша з таких ситуацій — це адресація пам'яті. Якщо вашій змінній виділили 4
байти пам'яті й ви знаєте, що X
— адреса першого байта, то яку адресу буде мати кожен із цих байтів? X+0
, X+1
, X+2
, X+3
. Ось ми вже й отримали групу байтів із індексами 0
, 1
, 2
, 3
(тобто для визначення адрес усіх байтів знадобилася група чисел саме від 0
до 3
).
Коли ми думаємо про відносну адресу всередині будь-якого блоку даних, завжди отримуємо нумерацію з нуля. Це і є перша й найпоширеніша причина починати відлік з нуля.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ