Глибше у String
Як насправді працює String?
Ви вже знаєте, що таке String
і як з ним працювати. У цьому розділі розглядаються теоретичні аспекти внутрішньої будови String
.
Дослідимо, як саме представлені значення String
у Java. Спочатку String
реалізовувався як масив значень типу char
, що було просто та інтуїтивно. Однак згодом реалізація перейшла на масив значень типу byte
. З'ясуємо причини цієї зміни.
Змінна типу char
у Java займає 2 байти пам'яті, тоді як змінна типу byte
потребує лише 1 байт. Використовуючи значення byte
, можна суттєво зменшити обсяг пам'яті, використовуючи лише чверть простору.
Як же String
зберігає різні символи, включаючи нечислові? Механізм подібний до змінної типу char
. Використовується таблиця ASCII, де числові дані зіставляються з певними символами, що дозволяє представляти широкий спектр символів у String
.
Розглянемо ілюстрацію, яка показує значення String
"Hello":
Комірки містять елементи типу byte
, які беруться з таблиці ASCII. У коді можна навіть переглянути точний масив byte
, що зберігається у значенні змінної типу String
. Це можна зробити за допомогою методу getBytes()
.
Main.java
package com.example; public class Main { public static void main(String[] args) { String hello = "Hello"; byte[] bytes = hello.getBytes(); printArray(bytes); } static void printArray(byte[] bytes) { for (byte element: bytes) { System.out.print(element + " "); } System.out.println(); } }
Можна побачити, що значення byte
ідентичні тим, що показані на діаграмі вище. Додатково, якщо цікаво, можна звернутися до ASCII таблиці та порівняти код кожного елемента з його відповідним значенням.
Можна маніпулювати цим масивом byte[]
, який отримується з об'єкта String
.
Дякуємо за ваш відгук!