LÄR DIG JAVA

Datatyper i Java: spara rätt typ av data i våra program


Nyckelord: Datatyper, integer, double, boolean

Det här kapitlet kommer behandla de primitiva datatyperna, även kallat grundläggande datatyper (engelska: data types) i Java. Vi kommer se hur vi kan deklarera (skapa) olika variabler och konstanter samt skillnader mellan olika datatyper. Avslutningsvis så kommer kapitlet gå igenom hur vi kan använda oss av variabler för en rad olika matematiska beräkningar, och mer generellt, vilka möjligheter och begränsningar de olika datatyperna medför.

Datatyper i Java

Datatyper i Java är det som bestämmer vilken slags data en variabel kan innehålla (t.ex. heltal, decimaltal, tecken, referens) där datatypen bestäms vid deklarationen. Det är viktigt att deklarera rätt datatyp till rätt data, då en variabel bara kan innehålla den typ av data den är deklarerad för. I program lagrar man data i variabler där varje variabel motsvaras av en minnesplats i datorn. Eftersom variabler går att använda om och om igen så blir de väldigt användbara och de utgör grunden i programmering.

Detta kapitel innehåller följande artiklar där vi först ska lära oss vad det innebär med olika datatyper, för att sedan gå vidare och implementera dem till en rad olika användningsområden

Vad är en datatyp i Java?

En datatyp berättar för datorn vilken typ av information som datan består av. Java och många andra kodspråk är så kallade typade språk. Med det menas att vi behöver hålla koll på vilken datatyp variabler har då vi använder dem till olika operationer. Det finns olika datatyper, där varje datatyp beskriver en viss sorts av data. För en dator är det nämligen stor skillnad på om man lagrar exempelvis en textsträng eller ett heltal, även om informationen är snarlik.

Java och många andra kodspråk är så kallade typade språk

I Java är det exempelvis skillnad att spara heltalet 10 eller textsträngen "10". Och det skulle såklart inte gå att multiplicera talet 5 med textsträngen "3". Därför behöver vi alltid ange vilken sorts information vi vill spara undan, så att kompilatorn kan tolka datan på rätt sätt. Detta gör vi med datatyper.

Sammanfattningsvis är en datatyp:

  • Ett sätt att berätta för datorn vilken sorts data en viss typ av information är.
  • Olika datatyper beskriver olika data, även om informationen beskriver samma sak, exempelvis heltalet 7 och textsträngen "7".
  • Berättar för datorn hur den ska tolka datan för att undvika fel, exempelvis en multiplikation mellan en textsträng och ett heltal.

Varför använda datatyper i Java?

I programmering lagrar vi hela tiden information i minnet för att kunna använda den vid ett senare tillfälle. Gör vi exempelvis en uträkning, vill vi ju kunna spara värdet på uträkningen till ett senare tillfälle. I Java lagrar man data i variabler av en viss datatyp. En datatyp är som det låter - en viss typ av data. Exempelvis lagrar man heltal i integers och text sparar man i Strings. Därför måste vi veta vilka datatyper som finns och vilken information datatypen kan hålla. Man kan exempelvis inte lagra ett heltal i en String eller vise versa.

I Java lagrar man data i variabler av en viss datatyp

- Oracle

Vad finns det för datatyper i Java?

Det finns två varianter av datatyper i Java, de primitiva datatyperna och Icke-primitiva datatyper (engelska: Non-primitive data types). En Icke-primitiv datatyp är en referens till en instans, till exempel en Array eller ett Objekt, och det låter säkerligen väldigt förvirrande. Oroa dig inte, vi kommer vi gå igenom vad allt det innebär i senare kapitel. Nu fokuserar vi på de primitiva datatyperna.

Vad är en primitiv datatyp i Java?

Varje datatyp tar upp en viss plats i minnet, ett visst antal bits. Du vet kanske redan att en dator enbart hanterar ettor och nollor (det vill säga bits) som representeras av det binära talsystemet (alltså ettor och nollor). Vi ska inte gå in på detalj hur det binära talsystemet fungerar här, men det viktiga att ta med sig är att stora tal behöver fler bits för att lagras, det vill säga större plats i minnet.

Välj en datatyp som rymmer värdena. Ett för stort heltalsliteral kan ge kompileringsfel, medan overflow vid heltalsberäkningar normalt inte ger ett körningsfel.

Figur 1 nedan visar en sammanställning av de fyra vanligaste kategorierna, nämligen heltal, decimaltal, boolesk datatyp och tecken, samt deras respektive datatyper

Datatyper Java Heltal Decimaltal Boolean Char
Figur 1: sammanställning av datatyper i Java

Men låt oss nu kolla lite närmare på de fyra olika kategorierna av primitiva datatyper.

Heltal i Java 

Vi börjar med heltalen, det vill säga 0, 1, 2, 3, ..., o.s,v. och dess negativa motsvarighet -1, -2, -3, ... , o.s.v. Det finns fyra stycken datatyper som lagrar heltal. Dessa är byte, short, int och long. Nedan ser du hur många bitar varje datatyp behöver, samt det minsta och största värdet som går att spara i respektive datatyp.

byte8−128127
short16−32 76832 767
int32−2 147 483 6482 147 483 647
long64−9 223 372 036 854 775 8089 223 372 036 854 775 807

int är ett vanligt val för heltal. Använd long när intervallet inte räcker. Heltalsaritmetik kan slå runt vid overflow utan ett undantag, så välj typ efter värdena och beräkningarna.

Flyttal (decimaltal) i Java

float och double är binära flyttal med 32 respektive 64 bitar. De har begränsad precision, ungefär 6–7 respektive 15–16 signifikanta decimalsiffror. De flesta decimaltal och irrationella tal som π lagras därför som approximationer.

Datatyp Bitstorlek Min-värde Max-värde
float 32 ≈  −3.4 × 1038 ≈  3.4 × 1038
double 64 ≈  −1.7 × 10308 ≈  1.7 × 10308

Logiska värden i Java

Typen boolean har värdena true och false. Till skillnad från vissa språk kan du inte använda heltalen 0 och 1 som booleska värden i Java.

Tecken och text i Java

En char lagrar en 16-bitars UTF-16-kodenhet, exempelvis 'a'. En String är ett objekt som representerar en text som en följd av sådana kodenheter. Vissa Unicode-tecken, exempelvis många emojier, kräver två char-värden.

Kan man byta mellan olika datatyper i Java?

Ja det går bra! Om problemet med att en operation inte kan utföras på grund av datatyperna inte överensstämmer så går det att lösa med hjälp av det som kallas typkonvertering. Vi kommer längre fram i det här kapitlet se hur vi kan använda typkonvertering och konvertera från en datatyp till en annan.

Sammanfattning av datatyper i Java

En datatyp berättar för datorn vilken typ av information som datan består av. Det finns olika datatyper, där varje datatyp beskriver en viss sorts av data.

En datatyp i Java är

  • Ett sätt att berätta för datorn vilken sorts data en viss typ av information består av.
  • Olika datatyper beskriver olika typer av data, även om informationen kan beskriva samma sak, exempelvis heltalet 14 och textsträngen “14”.
  • Datatyper hjälper datorn förstå hur den ska tolka datan för att undvika fel, exempelvis en multiplikation mellan en textsträng och ett heltal.

Vanliga frågor och svar: Datatyper i Java

Är det viktigt att jag väljer rätt datatyp?

Ja och nej. Det är viktigt att du väljer rätt kategori av datatyp. Exempelvis, ifall du jobbar med siffror och multiplicerar två tal så behöver du ha koll på vilken datatyp resultatet blir så att du skapar antingen ett heltal eller ett decimaltal, och inte t.ex. en boolean. Däremot är det inte lika viktigt att du väljer specifikt rätt datatyp. T.ex. i de flesta fall så spelar det inte så stor roll ifall du skapar en integer eller en long.

Hur vet jag att jag har valt rätt datatyp? Tänk om jag inser det när jag väl har byggt hela programmet.

Om man gör större fel, exempelvis om du skulle försöka multiplicera ett heltal med en textsträng så kommer kompilatorn automatiskt att varna. Däremot behöver du själv ha koll på vad resultatet på dina beräkningar blir. Om du t.ex. utför en uträkning med division, säg mellan heltalen 7 och 2 så kommer uträkningen 7 delat med 2 att bli = 3, fast du förmodligen ville att det skulle resultera i 3,5. Varför det blir så kommer vi se längre fram på sidan om Matematiska Operationer. Men om du behöver göra om en datatyp till en annan så kan vi alltid använda oss av typkonvertering och konvertera från en datatyp till en annan.

Kan inte kompileringen lösa det åt mig?

Nej. Java och många andra kodspråk är så kallade typade språk. Med det menas att vi behöver hålla koll på vilken datatyp variabler har då vi använder dem till olika operationer. Vi behöver helt enkelt berätta för datorn vilken sorts data en viss typ av information är.

Feedback