Kurssisisältö
Java Laajennettu
Java Laajennettu
Syvemmälle Merkkijonoon
Miten String todella toimii?
Tiedät jo, mikä String
on ja kuinka sitä käytetään. Tässä luvussa käsitellään teoreettisia näkökulmia siitä, mitä String
-olion sisällä tapahtuu.
Tutustutaan String
-arvojen taustalla olevaan esitystapaan Javassa. Alun perin String
toteutettiin char
-arvojen taulukkona, mikä oli suoraviivaista ja intuitiivista. Myöhemmin se kuitenkin muutettiin byte
-arvojen taulukoksi. Ymmärretään tämän muutoksen taustalla oleva syy.
char
-muuttuja Javassa vie 2 tavua muistia, kun taas byte
-muuttuja tarvitsee vain 1 tavun. Käyttämällä byte
-arvoja voimme merkittävästi pienentää muistinkulutusta, hyödyntäen vain neljäsosan tilasta.
Mutta miten String
voi sisältää erilaisia merkkejä, myös ei-numeerisia? Mekanismi on samanlainen kuin char
-muuttujalla. Hyödynnämme ASCII-taulukkoa, jossa numeeriset arvot on yhdistetty tiettyihin merkkeihin, mahdollistaen laajan merkkivalikoiman esittämisen String
-muuttujassa.
Tarkastellaan seuraavaksi havainnollistusta, joka esittää String
-arvon "Hello":
Solut sisältävät byte
-tyyppisiä alkioita, jotka otetaan ASCII-taulukosta. Voimme jopa tarkastella koodissa tarkkaa byte
-taulukkoa, joka tallennetaan String
-muuttujan arvoksi. Tämä onnistuu getBytes()
-metodilla.
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(); } }
Voimme nähdä, että byte
-arvot ovat identtisiä yllä olevan kaavion kanssa. Lisäksi, jos olet kiinnostunut, voit tarkastella ASCII-taulukkoa ja verrata kunkin alkion koodia sen vastaavaan arvoon.
Voimme käsitellä tätä byte[]
-taulukkoa, jonka saamme String
-oliosta.
Kiitos palautteestasi!