JAVA DUOMENŲ TIPAI
Java tipų konvertavimas
Tipų konvertavimas – vieno duomenų tipo reikšmės pavertimas kitu tipu, pavyzdžiui, int pavertimas į double. Java gali konvertuoti automatiškai arba reikalauti, kad tikslinį tipą nurodytum pats.
Du skaitinių tipų konvertavimo būdai
- Tipo išplėtimas (widening) atliekamas automatiškai, kai Java leidžia reikšmę priskirti platesniam tipui.
- Tipo siaurinimas (narrowing) nurodomas rankiniu būdu, tikslinį tipą parašant skliaustuose prieš reikšmę.
byte gali plėstis į short, int, long, float ar double. char gali plėstis į int ir platesnius skaitinius tipus, tačiau short automatiškai nekonvertuojamas į char.
Automatinis tipo išplėtimas
Java automatiškai atlieka leidžiamą išplėtimą. Šiame pavyzdyje int reikšmė priskiriama double kintamajam be papildomos sintaksės:
int sveikasis = 9;
double trupmeninis = sveikasis; // Automatinis int -> double
System.out.println(sveikasis); // 9
System.out.println(trupmeninis); // 9.0 Reikšmė 9 gali būti atvaizduota kaip double, todėl rezultatas parodomas kaip 9.0.
byte mazas = 100;
short trumpas = mazas;
int sveikasis = trumpas;
long ilgas = sveikasis;
double platus = ilgas;char konvertavimas į skaičių
char reikšmę galima automatiškai priskirti int kintamajam. Gautas skaičius yra UTF-16 kodo vieneto skaitinė reikšmė:
char raide = 'A';
int unicodeKodas = raide;
System.out.println(unicodeKodas); // 65Rankinis tipo siaurinimas
Siaurinant reikšmė gali nebetilpti į tikslinį tipą arba prarasti dalį informacijos. Todėl tikslinį tipą reikia aiškiai parašyti skliaustuose:
double trupmeninis = 9.78;
int sveikasis = (int) trupmeninis; // Rankinis double -> int
System.out.println(trupmeninis); // 9.78
System.out.println(sveikasis); // 9 Konvertuojant 9.78 į int, trupmeninė dalis atmetama. Rezultatas yra 9, o ne matematiškai suapvalinta reikšmė 10.
Reikšmė gali netilpti
Tipas byte saugo reikšmes tik nuo −128 iki 127. Siaurinant didesnį int, pertekliniai bitai atmetami ir rezultatas gali būti netikėtas:
int skaicius = 130;
byte mazas = (byte) skaicius;
System.out.println(mazas); // -126Prieš konvertuodamas patikrink, ar reikšmė telpa į tikslinio tipo intervalą.
Automatinis nereiškia visiškai tikslus
Java leidžia automatiškai konvertuoti int į float, tačiau float negali tiksliai atvaizduoti kiekvieno didelio sveikojo skaičiaus:
int tikslus = 16_777_217;
float apytikslis = tikslus;
System.out.println(tikslus); // 16777217
System.out.println(apytikslis); // 1.6777216E7 Išplėtimas yra leidžiamas be aiškios tipo nuorodos, tačiau pereinant iš int ar long į slankiojo kablelio tipą gali pasikeisti tikslumas. Tiksliems piniginiams skaičiavimams dažnai naudojamas float ar double.
Ką verta prisiminti?
- Leidžiamą tipo išplėtimą Java dažniausiai atlieka automatiškai.
- Siaurinant tikslinis tipas rašomas skliaustuose, pavyzdžiui,
(int). - Konvertuojant trupmeninį skaičių į sveikąjį, trupmeninė dalis atmetama.
- Siaurinant reikšmė gali perpildyti tikslinio tipo intervalą.
- Automatinis konvertavimas į slankiojo kablelio tipą gali sumažinti tikslumą.

