Helsingin yliopisto
/
Tietojenkäsittelytieteen
laitos
/
581258-1 Johdatus ohjelmointiin
Copyright © 1998
Arto Wikla.
Tämän oppimateriaalin käyttö on sallittu vain yksityishenkilöille
opiskelutarkoituksissa. Materiaalin käyttö muihin tarkoituksiin,
kuten kaupallisilla tai muilla kursseilla, on kielletty.
3.2 Alkeistyyppejä ja literaalivakioita
(Muutettu viimeksi 27.2.1998)
Javassa tyypit jaetaan
- alkeistyyppeihin (primitive types):
kokonaislukutyypit (byte, short, int, long, char),
liukulukutyypit (float, double),
totuusarvotyyppi (boolean)
- viittaustyyppeihin (reference type):
luokkatyypit, taulukkotyypit, ns. rajapintaluokkatyypit
Tässä kappaleessa käsitellään alkeistyyppejä. Viittaustyyppisiä
arvoja eli olioita käsitellään luvuissa 2.6 ja 4.
Kaikkia tyyppejä voi tuttujen tyyppien tapaan käyttää muuttujien
määrittelemisessä, muodollisen parametrin tyypinä, metodin tyyppinä, ...
Literaalivakioilla tarkoitetaan ohjelmatekstiin
kirjoitettuja vakioita, esim. 1, 3.14, true, ..., joilla ei
ole nimeä. Ne siis ymmärretään "kirjaimellisesti".
Nimetyt vakiot ovat "muuttujia, jotka on
määritelty muuttumattomiksi", esimerkiksi
final int VAKIOLUKU = 12345;
Nimettyjä vakiota käsitellään luvussa 4.2.
Arvoalue (ja literaalivakiot): true, false
Huom: Javassa boolean ei ole kokonaisluku eikä kokonaisluku ole
boolean (lukuarvon voi muuttaa totuusarvoksi esim.
vertailulla x!=0).
Kokonaislukuarvot (paitsi char) esitetään tietokoneessa ns.
2-komplementtimuodossa. Laskutoimitusten mahdollisesti aiheuttamaa
ns. ylivuotoa tai alivuotoa ei havaita! Literaalivakiot kirjoitetaan
tuttuun tapaan: 1, -54, 0, ...
[Ns. oktaali- ja heksadesimaaliarvoille
on oma esitysmuotonsa. On paras olla käyttämättä
'tarpeettomia' etunollia, jos ei erityisesti pidä
oktaaliluvuista! Myös long-vakioille on oma
esitysmuotonsa: 34L]
- byte (1 tavu)
Arvoalue: -128 - 127
- short (2 tavua)
Arvoalue: -32768 - 32767
- int (4 tavua)
Arvoalue: -2147483648 - 2147483647
(nämä löytyvät luokan Integer nimettyinä vakioina
Integer.MIN_VALUE ja Integer.MAX_VALUE)
- long (8 tavua)
Arvoalue: -9223372036854775808 - 9223372036854775807
(nämä löytyvät luokan Long nimettyina vakioina
Long.MIN_VALUE ja Long.MAX_VALUE)
Erityyppisten kokonaislukuarvojen sekoittaminen ei aina ole ongelmatonta.
Luvussa 3.3 opitaan miten kokonaislukutyyppien arvoja
voi muuttaa toisikseen.
Merkkiarvot (char) ovat positiivisia kahden tavun mittaisia
kokonaislukuja. Merkit on koodattu
Unicode-koodilla, joka sisältää maailman useimpien
kirjoitusjärjestelmien kirjain- ja numeromerkit:
mm. kreikka, kopti, venäjä, heprea, arabia,
devanagari, bengali, gurmukhi, gujarati, tamili, telegu,
tai, lao, hiragana, katakana, ...
Merkkivakiot esitetään yksinkertaisissa lainausmerkeissä, esimerkiksi:
'A', 'k', ' ', ';', '#', ... .
(Kaksoislainausmerkit on varattu String-tyyppisille
vakioille!)
Eräille erikoismerkeille on erityiset ilmaukset:
'\b' backspace
'\t' tabulaattori (tab)
'\n' rivinvaihto (lf)
'\f' sivunvaihto (ff)
'\r' telanpalautus (cr)
'\"' kaksinkertainen lainausmerkki
'\'' yksinkertainen lainausmerkki
'\\' takakenoviiva
'\ddd' merkki, jonka koodi oktaalilukuna on ddd
'\udddd' Unicode-merkki, jonka koodi hekdadesimaali-
lukuna on dddd
Huom: Näitä ilmauksia voi käyttää myös String-vakioissa!
Javan liukulukutyypit ovat:
- float (4 tavua)
Positiivinen arvoalue: 1.4013e-45 - 3.40282e+38
(nämä löytyvät luokan Float vakioina
Float.MIN_VALUE ja Float.MAX_VALUE)
- double (8 tavua)
Positiivinen arvoalue: 2.22507e-308 - 1.79769e+308
(nämä löytyvät luokan Double vakioina
Double.MIN_VALUE ja Double.MAX_VALUE)
Liukulukuvakiot ovat muotoa: 3.14, 124., .12, 5.6e3, 0.3E-9, 3e-10,
1.8e+3, ...
Huom: Kaikki liukulukuvakiot ovat oletusarvoisesti tyyppiä
double! Vakion saa float-tyyppiseksi kirjoittamalla sen loppuun
kirjaimen f tai F: 3.14f, 124.F, .12F, 5.6e3f, 0.3E-9f, ...
(Javan liukulukuaritmetiikka (lähes!) noudattaa standardia IEEE 754.)
(Liukulukujen arvoalueeseen kuuluvat myös positiivinen ja
negatiivinen ääretön ja erityinen NaN-arvo,
"not a number".
Näiden avulla pidetään mm. huoli siitä, että alilausekkeen
laskennassa tullut 'huono' arvo tekee koko lausekkeen arvon
'huonoksi'. Tällä kurssilla ei numeerisen laskennan hienouksia
kuitenkaan käsitellä!)
Takaisin luvun 3 sisällysluetteloon.