În limbajul Java, reprezentarea internă a caracterelor se face pe 2 octeți (16 biți), în sistemul Unicode. In acest sistem, caracterele sunt codificate în memoria internă prin numere întregi pozitive în intervalul [0, 65535]. În fluxurile de date de intrare/ieșire și în fișiere, caracterele pot fi reprezentate și în alte coduri. Codul cel mai frecvent folosit în aceste scopuri este ASCII, în care reprezentarea caracterelor se face pe un singur octet, deci prin numere întregi fără semn în intervalul [0, 255].
Remarcăm ca datele de tip char sunt singurul tip de date întregi fără semn din limbajul Java, mulțimea de valori a acestui tip de date fiind intervalul de numere naturale [0, 65535].
Reprezentarea externă a caracterelor se face în una din
următoarele forme:
a/ punând caracterul respectiv între apostrofuri: 'a', 'B', '+',
'(', '3', etc;
b/ folosind o secvență escape, în care apare codul numeric
hexazecimal al caracterului respectiv, în Unicode, de ex: '\u006c'
sau '\uffff'; într-o astfel de secvență, codul numeric al
caracterului (format din patru cifre hexazecimale) este precedat de \u;
c/ folosind o secventa escape pentru caracterele speciale din
urmatorul tabel:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Datele de tip char pot fi folosite în operații numerice, în care caz
ele sunt interpretate drept numere intregi fără semn, conform cu
reprezentarea lor internă prin numere binare. Din acest motiv, în
limbajul Java datele de tip char sunt incluse în categoria
celor de tipuri întregi.
În programele Java, secvențele escape pot fi folosite pentru
a reprezenta caracterele în orice loc din textul sursa. Peste tot unde
întâlnește în textul sursă caracterul \ (bara inversă, backslash),
compilatorul consideră că urmeaza o secvență escape, pe care o
înlocuiește cu caracterele Unicode corespunzătoare.
|
Exemplu
În programul de mai jos, dat in fișierul TestChar.java,
se testează unele operații cu date de tip char.
/* Operatii cu date de tip char */
class TestChar { |
La executarea acestui program, rezultatele afișate pe ecran sunt
cele de mai jos:
A a 1 * b 65 97 10 49 42 162 6305 k 2 50 3 51 101 |
După afișarea caracterelor A și a s-a transmis către
dispozitivul de afișare caracterul '\n', care a fost
interpretat drept comanda de trecere la linie nouă. După aceasta au fost
afșsate caracterele 1, * și b. Pe linia următoare sunt afișate
caracterele deja afișate anterior, convertite în numere întregi. Se
observă că în Unicode caracterul 'A' este reprezentat prin numarul 65,
caracterul 'a' prin numarul 97, caracterul '\n' prin 10 etc. Pe următoarele două linii sunt afișate rezultatele operațiilor 'c1'+'c2' si 'c1'*'c2', obținându-se respectiv valorile numerice 162 si 6305. Se observă că, întrucât caracterele au fost folosite ca operanzi ai unor operatori aritmetici, rezultatele obținute sunt numerice (de tip int). Pe linia următoare se afișează numărul 107 convertit din int în char și interpretat deci drept 'k'; Pe ultima linie putem observa deosebirea dintre forma externă a caracterului (literalul de tip char) și codificarea lui interna. Literalul de tip char '2' este caracterul 2 si nu numarul 2. În consecință, acest caracter nu se reprezinta intern prin numarul întreg 2, ci prin numărul întreg 50. În mod corespunzator, caracterul '3' se reprezinta intern prin numarul 51. Suma codurilor numerice ale celor doua caractere este, evident, numărul 101. |