Java-kielessä on 8 pri­mi­tii­vis­tä tie­to­tyyp­piä, joilla kaikilla on kiinteä koko ja mää­ri­tel­ty arvoalue. Niitä käytetään muut­tu­jien luomiseen ja niille yk­si­löl­lis­ten nu­me­roi­den, merkkien tai loogisten arvojen mää­rit­tä­mi­seen. Java-kielen 8 pri­mi­tii­vis­tä tie­to­tyyp­piä ovat boolean, byte, char, double, float, int, long ja short.

Mitä ovat Java-pri­mi­tii­vit?

Muiden oh­jel­moin­ti­kie­lien tavoin Java-kielessä on erilaisia tie­to­tyyp­pe­jä. Java-kielessä ne jaetaan kahteen luokkaan. En­sim­mäi­nen on vii­te­tyy­pit, jotka viit­taa­vat vapaasti mää­ri­tel­tä­vään objektiin, kuten merk­ki­jo­noi­hin, tau­lu­koi­hin, luokkiin ja ra­ja­pin­toi­hin. Toinen on Java-pri­mi­tii­vien luokka. Niillä on kiinteä koko, joka on sama kaikilla alus­toil­la. Niillä on myös oma wrapper-luokka, ne ovat muut­tu­mat­to­mia ja niillä on kiinteä arvoalue. Java-pri­mi­tii­ve­jä käytetään yk­sit­täis­ten nu­me­roi­den, merkkien tai loogisten arvojen muut­tu­jien luomiseen.

Java-kielessä on 8 erilaista pri­mi­tii­vis­tä tie­to­tyyp­piä, jotka eroavat toi­sis­taan pää­asias­sa tal­len­ta­mien­sa arvojen suhteen. Niille kaikille on yhteistä, että ne voivat sisältää vain yhden arvon. Koska joitakin niistä käytetään sa­man­kal­tai­sis­sa ti­lan­teis­sa, voimme jakaa Java-pri­mi­tii­vit neljään luokkaan:

  • Looginen tie­to­tyyp­pi (boolean)
  • In­tegroi­tu tie­to­tyyp­pi (byte, short, int ja long)
  • Liu­ku­lu­kui­nen tie­to­tyyp­pi (float ja double)
  • Merkki-tie­to­tyyp­pi (char)

Koska ne tal­len­ne­taan suoraan pinoon, niiden koot ovat erityisen tärkeitä. Kä­sit­te­lem­me tätä tarkemmin myöhemmin tässä oppaassa. Java-pri­mi­tii­vit ovat tärkeitä myös siksi, että Java on staat­ti­ses­ti tyy­pi­tet­ty kieli. Kun luot ohjelmaa, sinun on siis mää­ri­tel­tä­vä jo etukäteen, minkä tyyppinen muuttuja on kyseessä, muuten saat vir­heil­moi­tuk­sia. Tässä on yleis­kat­saus Java-pri­mi­tii­veis­tä:

Tie­to­tyyp­pi Koko Arvoalue Ole­tusar­vo Kää­re­luok­ka
boolean 1 bitti true tai false epätosi java.lang.Boolean
bitti 8 bittiä -128–127 0 java.lang.Byte
lyhyt 16 bittiä -32768–32767 0 java.lang.Short
int 32 bittiä -2147483648 – 2147483647 0 java.lang.Integer
pitkä 64 bittiä -9223372036854775808 – 9223372036854775807 0 java.lang.Long
float 32 bittiä enintään 7 de­si­maa­lia 0,0 java.lang.Float
double 64 bittiä enintään 16 de­si­maa­lia 0,0 java.lang.Double
char 16 bittiä **’\u0000’ (eli 0) – ‘\uffff’ (vastaa 65535) ‘\u0000’ java.lang.Character

Java-pri­mi­tii­vi­sen boolean-tyypin käyttö

Java-booli tunnetaan myös nimellä to­tuusar­vo. Se on yk­sin­ker­tai­sin Java-pri­mi­tii­vi­nen tyyppi, sillä sillä on vain kaksi mah­dol­lis­ta arvoa: ”true” tai ”false”. Sitä käytetään, kun tarvitaan loogista operandia, ja se on ainoa looginen tie­to­tyyp­pi. Lausek­keis­sa sen kaksi mah­dol­lis­ta arvoa edustavat yleensä ehtoa, joka joko täyttyy (true) tai ei täyty (false). Jos et määritä Boolean-tyypille arvoa, sen ole­tusar­vo­na on false. Boolean-tyyppiä voidaan yhdistää Java-kielessä Boolean-ope­raat­to­rei­hin, kuten AND ja OR. Arvon mää­rit­tä­mi­nen Boolean-tyypille tapahtuu seu­raa­vas­ti:

public class Main {
	public static void main(String[] args) {
		boolean x = true;
		System.out.println(x);
	}
}
java

Jos käytät Java-komentoa System.out.prinln tu­los­tuk­sen alus­ta­mi­seen, tulostus näyttää tältä:

true
java

tavu

byte on pienin tie­to­tyyp­pi ko­ko­nais­lu­ku­tyyp­pien joukossa. Sen arvoalue on hyvin ra­joi­tet­tu, nimittäin **-128:**sta 127:ään. Se käyttää kuitenkin vain 8 bittiä muistia. Itse asiassa se on saanut nimensä siitä, että 8 bittiä muodostaa yhden tavun. Jos työs­ken­te­let vain hyvin ra­joi­te­tul­la ar­voa­lu­eel­la, voit mää­ri­tel­lä tavun seu­raa­vas­ti:

public class Main {
	public static void main(String[] args) {
		byte x = 101;
		System.out.println(x);
	}
}
java

Tulostus näyttää seu­raa­val­ta:

101
java

lyhyt

short on kaksi kertaa suurempi kuin byte, mikä tar­koit­taa, että se on myös yksi harvemmin käy­te­tyis­tä Java-pri­mi­tii­veis­tä. Mutta jos byte on liian pieni ja int liian suuri, short saattaa olla etsimäsi ko­ko­nais­lu­ku­tyyp­pi. Näin se mää­ri­tel­lään:

public class Main {
	public static void main(String[] args) {
		short x = -27412;
		System.out.println(x);
	}
}
java

Tulostus näyttää tältä:

-27412
java

int

int on useimmin käytetty ko­ko­nais­lu­ku­tyyp­pi. Sen arvoalue on erittäin laaja, mutta se säästää silti tilaa. int on kahden komple­men­tin arvo, jota käytetään usein myös muihin tar­koi­tuk­siin. Näin sitä käytetään:

public class Main {
	public static void main(String[] args) {
		int x = 14;
		int y = 3;
		int z = x + y;
		System.out.println(x + " + " + y + " = " + z);
	}
}
java

Tulostus näyttää seu­raa­val­ta:

14 + 3 = 17
java

pitkä

long on int-tyypin laajennus ja voi sisältää vielä pidempiä lukuja. int riittää useim­mis­sa ta­pauk­sis­sa, mutta jos haluat mää­ri­tel­lä long-tyypin, voit tehdä sen seu­raa­vas­ti:

public class Main {
	public static void main(String[] args) {
		long x = 47;
		System.out.println(x);
	}
}
java

Tässä on tulos:

47
java

kellua

Järkevien lukujen os­ajouk­ko­jen esit­tä­mi­seen on kaksi Java-pri­mi­tii­viä. float on pienempi kahdesta liu­ku­lu­vu­tyy­pis­tä ja käyttää 32 bittiä. Se voi näyttää enintään 7 de­si­maa­lia. Se ei kui­ten­kaan ole kovin tarkka, joten sitä ei käytetä kovin usein. Jos päätät käyttää sitä, voit määrittää sen seu­raa­vas­ti:

public class Main {
	public static void main(String[] args) {
		float x = 7.22f;
		System.out.println(x);
	}
}
java

Huomaa, että numeron jälkeen on lisättävä pieni tai iso f-kirjain, jotta tietokone tunnistaa sen float-tyyp­pi­sek­si eikä double-tyyp­pi­sek­si. F-kirjainta ei näytetä tu­los­tees­sa:

7.22
java

kak­sin­ker­tai­nen

Toinen liu­ku­lu­kui­nen tie­to­tyyp­pi on double. Se on huo­mat­ta­vas­ti tarkempi kuin float, mutta ei silti palauta täysin tarkkoja tuloksia. Jos etsit vaih­toeh­toa, voit käyttää Big­Deci­mal-luokkaa. Jos double sopii tar­koi­tuk­see­si, voit määrittää sen seu­raa­vas­ti:

public class Main {
	public static void main(String[] args) {
		double x = 7.2252;
		System.out.println(x);
	}
}
java

Huomaa, että tässä ei ole yli­mää­räis­tä kirjainta. Tulostus näyttää seu­raa­val­ta:

7.2252
java

hahmo

char-tyyppiä käytetään Unicode-merkkien esit­tä­mi­seen. Sen arvoalue on ‘\u0000’ – ‘\uffff’, eli 0 – 65535. Merk­ki­tyyp­pi voi esittää lähes kaikki eu­roop­pa­lai­set ja aa­sia­lai­set merkit. Se käyttää 16 bittiä muistia. Tämän Java-pri­mi­tii­vi­sen tyypin arvot asetetaan yk­sit­täi­siin lai­naus­merk­kei­hin. Näin se näyttää koodissa:

public class Main {
	public static void main(String[] args) {
		char x = '&';
		System.out.println(x);
	}
}
java

Tulostus näyttää seu­raa­val­ta:

&
java
Siirry pää­va­lik­koon