1. Liste over primitive typer
Java har 8 grunnleggende primitive typer. De kalles primitive fordi verdiene til disse typene ikke er objekter og lagres direkte i variabler.
Her er en tabell med litt kort informasjon om disse typene:
Type | Størrelse i byte |
Verdiområde | Standardverdi | Beskrivelse |
---|---|---|---|---|
byte |
1 | -128 .. 127 | 0 |
Den minste heltallstypen er en enkeltbyte |
short |
2 | -32.768 .. 32.767 | 0 |
Kort heltall, to byte |
int |
4 | -2*10 9 .. 2*10 9 | 0 |
Heltall, 4 byte |
long |
8 | -9*10 18 .. 9*10 18 | 0L |
Langt heltall, 8 byte |
float |
4 | -10 38 .. 10 38 | 0.0f |
Flytende tall, 4 byte |
double |
8 | -10 308 .. 10 308 | 0.0d |
Flytende tall med dobbel presisjon, 8 byte |
boolean |
1 | true ,false |
false |
Boolsk type (bare true og false ) |
char |
2 | 0 ... 65,535 | '\u0000' |
Tegn, 2 byte, alle større enn 0 |
Forresten, her er en viktig nyanse. Hvis du erklærer en forekomstvariabel (felt) eller en statisk klassevariabel og ikke umiddelbart tilordner noen verdi til den, initialiseres den med en standardverdi . Tabellen viser en liste over disse verdiene.
Lokale variabler i en metode har ingen standardverdi. Hvis du ikke tildeler en verdi til slike variabler, anses de som uinitialiserte og kan ikke brukes.
Men la oss gå tilbake til primitive typer og se nærmere på dem.
2. Heltallstyper
Java har 4 heltallstyper: byte
, short
, int
og long
. De er forskjellige i størrelse og rekkevidde av verdier de kan lagre.
int
type
Den mest brukte er int
typen. Navnet kommer fra ordet int eger (helt tall). Alle heltalls bokstaver (hele tall) i kode er ints
(hvis de ikke ender på L
, F
, eller D
).
Variabler av denne typen kan ta verdier fra -2,147,483,648
til +2,147,483,647
.
Det er mye og er tilstrekkelig for nesten enhver anledning. Nesten hver funksjon som returnerer et tall, returnerer en int
.
Eksempler:
Kode | Forklaring |
---|---|
|
Metoden length() returnerer lengden på en streng |
|
Feltet length inneholder lengden på matrisen. |
short
type
Typen short
har fått navnet sitt fra short int
. Det kalles også ofte et kort heltall . I motsetning til int
typen er dens lengde bare to byte og rekkevidden av mulige verdier er fra -32,768
til +32,767
.
Det betyr at du ikke kan lagre nummer én million i den. Eller til og med 50 000. Dette er den mest sjeldent brukte heltallstypen i Java. Hovedmotivasjonen for å bruke den er å spare på minnet.
Anta at du har en situasjon der du på forhånd vet at du kommer til å jobbe med verdier som aldri overstiger 30 000, og det vil være millioner av disse verdiene.
La oss for eksempel si at du skriver et program som behandler bilder med ultrahøy definisjon som bruker 10
-bits per farge. Og du har en million piksler i bildet ditt. Dette er et scenario der beslutningen om å bruke int
eller short
betyr noe.
long
type
Denne typen får navnet sitt fra long int
og kalles også et langt heltall . I motsetning til int
typen har den et fabelaktig enormt utvalg av verdier: fra til .-9*1018
+9*1018
Hvorfor er det ikke den grunnleggende heltallstypen?
Fordi Java dukket opp på midten av 90-tallet, da de fleste datamaskiner var 32-biters. Det betyr at alle prosessorer ble optimalisert for å jobbe med tall som består av 32 biter. Prosessorer kunne fungere med 64-bits heltall, men operasjonene med dem gikk tregere.
Som et resultat bestemte programmerere rimeligvis å lage int
standard heltallstype, og å bruke long
typen bare når det virkelig var nødvendig.
byte
type
Dette er den minste heltallstypen i Java, men langt fra den minst brukte. Navnet, byte
, er også ordet for den minste adresserbare minneblokken i Java.
Det er ikke så mange gyldige verdier for byte
typen: fra -128
til +127
. Men det er ikke dens styrke. Typen byte
brukes oftest når du skal lagre en stor blob-data i minnet. En rekke byte
s er ideell for dette formålet.
Anta at du må kopiere en fil et sted.
Du trenger ikke å behandle innholdet i filen: du vil bare lage et minneområde (buffer), kopiere innholdet i filen inn i den, og deretter skrive disse dataene fra bufferen til en annen fil. En byte
array er det du trenger for dette.
Husk at en matrisevariabel bare lagrer en referanse til et minneområde. Når variabelen sendes til en eller annen metode, sendes bare minneadressen. Selve minneblokken blir ikke kopiert.
byte[] buffer = new byte[1024*1024];
FileInputStream sourceFile = new FileInputStream("c:\\data.txt");
FileOutputStream destFile = new FileOutputStream("c:\\output.txt");
while (true)
{
int size = sourceFile.read(buffer); // Read data from a file into a buffer
destFile.write(buffer, 0, size); // Write data from the buffer to a file
// Stop copying if the buffer is not full
if (size < buffer.length) break;
}
sourceFile.close();
destFile.close();
3. Ekte typer
De primitive typene inkluderer to typer for reelle tall. Selv om det ikke er helt riktig å bruke det begrepet. Når datamaskiner håndterer reelle tall, kaller vi dem flytende tall . Navnet kommer fra en standard for å representere tall, der heltalls- og brøkdelene av et tall er atskilt med et punktum (et punkt, ikke et komma).
Hvert land har sine egne standarder for å skrive tall (overraskelse!).
Mange mennesker er vant til å bruke punktum for å skille tusenvis og kommaer som desimalskilletegn: for eksempel vil de skrive one million ones and 153 thousandths
som 1.000.000,153
. Men i USA, der Javas skapere bodde, ble en annen standard tatt i bruk:1000000.153
Java har to primitive flytepunktstyper: double
og float
.
Som vi sa tidligere, har disse typene et veldig spesifikt internt arrangement: faktisk inne i hver variabel av disse typene er det ikke ett tall, men to:
Flytende kommanummer 987654.321
kan for eksempel representeres som . Da vil det i minnet bli representert som to tall ( mantissen , dvs. den betydelige delen av tallet) og ( eksponent , dvs. en potens av ti)0.987654321*106
987654321
6
float
type
Navnet på float
typen kommer fra flytende punktnummer . Størrelsen på denne typen er ganske liten — bare 4 byte (32 bits) — men den kan lagre verdier fra til . 24 biter er tildelt for å representere mantissen, og 8 biter for eksponenten. Denne typen er i stand til å lagre bare 8 signifikante sifre.-3.4*1038
3.4*1038
Denne tilnærmingen gjør det mulig å lagre mye større tall enn en int
, mens du bruker de samme 4 bytene. Men for å gjøre det, ofrer vi nøyaktighet. Fordi en del av minnet lagrer mantissen, lagrer disse variablene bare 6-7 desimaler mens resten forkastes.
Eksempel:
Kode | Verdi |
---|---|
|
123.45679 |
|
12346.0 |
|
-1.2345679 |
Som du kan se, er denne typens største ulempe det svært lille antallet signifikante siffer, og tap av presisjon så snart det åttende sifferet. Det er derfor float
typen ikke er veldig populær blant Java-programmerere.
double
type
Typen double
er standard flytende kommatype. Navnet kommer fra dobbel presisjons flyttall . Alle virkelige bokstaver er double
s som standard.
Denne typen tar opp 8 byte minne (64 biter) og kan lagre verdier fra til . En viktig ting å vite er at 53 biter er tildelt for mantissen, mens de resterende 11 er for eksponenten.-1.7*10308
1.7*10308
Dette gjør at 15-17 signifikante sifre kan lagres.
Eksempel:
Kode | Verdi |
---|---|
|
1234567890.1234567 |
|
1234567890.1234512 |
|
1234567890.1357913 |
Denne presisjonen, spesielt i sammenligning med float
typen, er avgjørende: 99 % av alle operasjoner med reelle tall utføres ved bruk av double
typen.
11
bits er tildelt for eksponenten, noe som betyr at du kan lagre potenser på ti fra -323
til +308
(det er en potens av to fra -1024
til +1023
). Typen double
kan enkelt lagre et tall med hundrevis av nuller etter desimaltegn:
Kode | Verdi |
---|---|
|
600.0 |
4. Uendelig
Flytende tall har en annen interessant funksjon: de kan lagre en spesiell verdi som angir uendelig . Og du kan representere positiv uendelighet og negativ uendelighet .
Eksempler:
Kode | Merk |
---|---|
|
|
|
|
|
|
Hvis uendelighet multipliseres med et tall, får du uendelig. Hvis du legger til et tall til uendelig, får du uendelig. Det er super praktisk.
Ikke et tall ( NaN
)
Alle operasjoner som involverer uendelig gir uendelig. Vel, de fleste, men ikke alle.
Flytende tall kan lagre en annen spesiell verdi: NaN
. Det er forkortelse for N ot a N umber (ikke et tall).
I matematikk, hvis du deler uendelig med uendelig, er resultatet udefinert.
Men i Java, hvis du deler uendelig med uendelig, er resultatet NaN
.
Eksempler:
Kode | Merk |
---|---|
|
|
|
|
|
|
Enhver operasjon med NaN
utbytte NaN
.
5. char
type
Blant Javas primitive typer fortjener en spesiell oppmerksomhet: typen char
. Navnet kommer fra ordet karakter , og selve typen brukes til å lagre tegn .
Karakterer er hva strenger er laget av, ikke sant? Strenger er en rekke karakterer.
Men enda mer interessant er det at char
typen også er en numerisk type ! Det er en type med to formål, for å si det sånn.
Realiteten er at char
typen faktisk ikke har karakterer. I stedet lagrer den tegnkoder fra Unicode-kodingen. Hvert tegn tilsvarer et tall: tegnets numeriske kode.
Hver char
variabel opptar to byte i minnet (det samme som short
typen). Men i motsetning til short
typen, char
er heltallstypen usignert og kan lagre verdier fra 0
til 65,535
.
Typen char
er en hybrid type. Verdiene kan tolkes både som tall (f.eks. kan de adderes og multipliseres) og som tegn. Dette ble gjort fordi selv om karakterer er visuelle representasjoner, er de for en datamaskin fremfor alt bare tall. Og det er mye mer praktisk å jobbe med dem som tall.
Unicode
Unicode er en spesiell tabell (koding) som inneholder alle tegnene i verden. Og hver karakter har sitt eget nummer. Det ser omtrent slik ut:
Det er forskjellige måter å tilordne en verdi til en char
variabel.
Kode | Beskrivelse |
---|---|
|
Variabelen a vil inneholde den latinske bokstaven A . |
|
Variabelen a vil inneholde den latinske bokstaven A . Koden er 65 . |
|
Variabelen a vil inneholde den latinske bokstaven A . Koden er 65 , som er lik 41 i det heksadesimale systemet. |
|
Variabelen a vil inneholde den latinske bokstaven A . Koden er 65 , som er lik 41 i det heksadesimale systemet. De to ekstra nullene endrer ingenting. |
|
Variabelen a vil inneholde den latinske bokstaven A . En annen måte å definere et tegn ved koden. |
Oftest angir folk ganske enkelt tegnet i anførselstegn (som i den første raden i tabellen). Når det er sagt, er sistnevnte metode også populær. Fordelen er at den kan brukes i strenger.
Og som vi sa, char
typen er også en heltallstype, så du kan skrive noe som dette:
Kode | Konsollutgang |
---|---|
|
Den latinske bokstaven B vil vises på skjermen. Fordi: A – 65 B – 66 C –67 |
Arbeider med char
s
Hver char
er først og fremst et tall (tegnkode), og deretter et tegn. Hvis du kjenner en tegnkode, kan du alltid få tegnet i programmet ditt. Eksempel:
Kode | Konsollutgang |
---|---|
|
|
Standard koder
Her er de mest kjente tegnkodene:
Tegn | Koder |
---|---|
0 , 1 , 2 , ...9 |
48 , 49 , 50 , ...57 |
a , b , c , ...z |
97 , 98 , 99 , ...122 |
A , B , C , ...Z |
65 , 66 , 67 , ...90 |
6. boolean
type
Og den siste primitive typen er boolean
.
Som du allerede vet, kan det bare ta to verdier: true
og false
.
Og med det vet du allerede alt som er å vite om denne typen.
GO TO FULL VERSION