1. Liste over primitive typer
Java har 8 grundlæggende primitive typer. De kaldes primitive, fordi værdierne af disse typer ikke er objekter og er gemt direkte inde i variabler.
Her er en tabel med nogle korte oplysninger om disse typer:
Type | Størrelse i bytes |
Værdiinterval | Standard værdi | Beskrivelse |
---|---|---|---|---|
byte |
1 | -128 .. 127 | 0 |
Den mindste heltalstype er en enkelt byte |
short |
2 | -32.768 .. 32.767 | 0 |
Kort heltal, to bytes |
int |
4 | -2*10 9 .. 2*10 9 | 0 |
Heltal, 4 bytes |
long |
8 | -9*10 18 .. 9*10 18 | 0L |
Langt heltal, 8 bytes |
float |
4 | -10 38 .. 10 38 | 0.0f |
Flydende kommanummer, 4 bytes |
double |
8 | -10 308 .. 10 308 | 0.0d |
Dobbelt-præcision flydende decimaltal, 8 bytes |
boolean |
1 | true ,false |
false |
Boolesk type (kun true og false ) |
char |
2 | 0 ... 65,535 | '\u0000' |
Tegn, 2 bytes, alle større end 0 |
Forresten, her er en vigtig nuance. Hvis du erklærer en instansvariabel (felt) eller en statisk klassevariabel og ikke umiddelbart tildeler nogen værdi til den, initialiseres den med en standardværdi . Tabellen viser en liste over disse værdier.
Lokale variabler i en metode har ingen standardværdi. Hvis du ikke tildeler en værdi til sådanne variable, betragtes de som uinitialiserede og kan ikke bruges.
Men lad os vende tilbage til primitive typer og se nærmere på dem.
2. Heltalstyper
Java har 4 heltalstyper: byte
, short
, int
og long
. De adskiller sig i deres størrelse og rækkevidde af værdier, de kan gemme.
int
type
Den mest brugte er int
typen. Navnet kommer fra ordet int eger (helt tal). Alle heltallige bogstaver (heltal) i kode er ints
(hvis de ikke ender på L
, F
, eller D
).
Variabler af denne type kan tage værdier fra -2,147,483,648
til +2,147,483,647
.
Det er meget og er nok til næsten enhver lejlighed. Næsten hver funktion, der returnerer et tal, returnerer en int
.
Eksempler:
Kode | Forklaring |
---|---|
|
Metoden length() returnerer længden af en streng |
|
Feltet length indeholder længden af arrayet. |
short
type
Typen short
har sit navn fra short int
. Det kaldes også ofte et kort heltal . I modsætning til int
typen er dens længde kun to bytes, og rækken af mulige værdier er fra -32,768
til +32,767
.
Det betyder, at du ikke kan gemme tallet en million i den. Eller endda 50.000. Dette er den mest sjældent anvendte heltalstype i Java. Hovedmotivationen for at bruge det er at bevare hukommelsen.
Antag, at du har en situation, hvor du på forhånd ved, at du vil arbejde med værdier, der aldrig overstiger 30.000, og der vil være millioner af disse værdier.
Lad os f.eks. sige, at du skriver et program, der behandler billeder i ultrahøj opløsning, der bruger 10
-bits pr. farve. Og du har en million pixels i dit billede. Dette er et scenarie, hvor beslutningen om at bruge int
eller short
har betydning.
long
type
Denne type får sit navn fra long int
og kaldes også et langt heltal . I modsætning til int
typen har den et fabelagtigt enormt udvalg af værdier: fra til .-9*1018
+9*1018
Hvorfor er det ikke den grundlæggende heltaltype?
Fordi Java dukkede op i midten af 90'erne, hvor de fleste computere var 32-bit. Det betyder, at alle processorer var optimeret til at arbejde med tal bestående af 32 bit. Processorer kunne arbejde med 64-bit heltal, men operationer med dem var langsommere.
Som et resultat besluttede programmører med rimelighed at lave int
standard heltalstypen og long
kun at bruge typen, når det virkelig var nødvendigt.
byte
type
Dette er den mindste heltalstype i Java, men langt fra den mindst brugte. Dens navn, byte
, er også ordet for den mindste adresserbare hukommelsesblok i Java.
Der er ikke så mange gyldige værdier for byte
typen: fra -128
til +127
. Men det er ikke dens styrke. Typen byte
bruges oftest, når du skal gemme en stor klat-data i hukommelsen. En række byte
s er ideel til dette formål.
Antag, at du skal kopiere en fil et sted.
Du behøver ikke at behandle indholdet af filen: du vil bare oprette et hukommelsesområde (buffer), kopiere indholdet af filen ind i den og derefter skrive disse data fra bufferen til en anden fil. Et byte
array er, hvad du har brug for til dette.
Husk, at en matrixvariabel kun gemmer en reference til et hukommelsesområde. Når variablen overføres til en eller anden metode, er det kun hukommelsesadressen, der overføres. Selve hukommelsesblokken kopieres ikke.
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. Rigtige typer
De primitive typer omfatter to typer for reelle tal. Selvom det ikke er helt korrekt at bruge det udtryk. Når computere håndterer rigtige tal, kalder vi dem floating-point-tal . Navnet kommer fra en standard til at repræsentere tal, hvor heltal og brøkdele af et tal er adskilt af et punktum (et punkt, ikke et komma).
Hvert land har sine egne standarder for at skrive tal (overraskelse!).
Mange mennesker er vant til at bruge punktum til at adskille tusinder og kommaer som decimalseparator: for eksempel ville de skrive one million ones and 153 thousandths
som 1.000.000,153
. Men i USA, hvor Javas skabere boede, blev en anden standard vedtaget:1000000.153
Java har to primitive typer med flydende komma: double
og float
.
Som vi sagde tidligere, har disse typer et meget specifikt internt arrangement: i hver variabel af disse typer er der faktisk ikke et tal, men to:
F.eks. 987654.321
kan det flydende komma-tal repræsenteres som . Så vil det i hukommelsen blive repræsenteret som to tal ( mantissen , dvs. den betydelige del af tallet) og ( eksponent , dvs. en potens af ti)0.987654321*106
987654321
6
float
type
Navnet på float
typen kommer fra float ing-point number . Størrelsen af denne type er ret lille - kun 4 bytes (32 bit) - men den kan gemme værdier fra til . 24 bit er allokeret til at repræsentere mantissen og 8 bit til eksponenten. Denne type er kun i stand til at gemme 8 signifikante cifre.-3.4*1038
3.4*1038
Denne tilgang gør det muligt at gemme meget større tal end en int
, mens du bruger de samme 4 bytes. Men for at gøre det ofrer vi nøjagtigheden. Fordi en del af hukommelsen gemmer mantissen, lagrer disse variable kun 6-7 decimaler, mens resten kasseres.
Eksempel:
Kode | Værdi |
---|---|
|
123.45679 |
|
12346.0 |
|
-1.2345679 |
Som du kan se, er denne type største ulempe det meget lille antal signifikante cifre og tabet af præcision så snart det ottende ciffer. Derfor float
er typen ikke særlig populær blandt Java-programmører.
double
type
Typen double
er standardtypen med flydende komma. Navnet kommer fra dobbelt præcision med flydende kommatal . Alle rigtige bogstaver er double
s som standard.
Denne type optager 8 bytes hukommelse (64 bit) og kan gemme værdier fra til . En vigtig ting at vide er, at 53 bit er allokeret til mantissen, mens de resterende 11 er til eksponenten.-1.7*10308
1.7*10308
Dette gør det muligt at lagre 15-17 signifikante cifre.
Eksempel:
Kode | Værdi |
---|---|
|
1234567890.1234567 |
|
1234567890.1234512 |
|
1234567890.1357913 |
Denne præcision, især i sammenligning med float
typen, er afgørende: 99% af alle operationer med reelle tal udføres ved hjælp af double
typen.
11
bits er allokeret til eksponenten, hvilket betyder, at du kan gemme potenser på ti fra -323
til +308
(det er en potens af to fra -1024
til +1023
). Typen double
kan nemt gemme et tal med hundredvis af nuller efter decimaltegnet:
Kode | Værdi |
---|---|
|
600.0 |
4. Uendelighed
Flydende kommatal har en anden interessant funktion: de kan gemme en speciel værdi, der angiver uendelig . Og du kan repræsentere positiv uendelighed og negativ uendelighed .
Eksempler:
Kode | Bemærk |
---|---|
|
|
|
|
|
|
Hvis uendelighed ganges med et tal, får du uendelighed. Hvis du tilføjer et tal til uendeligt, får du uendeligt. Det er super praktisk.
Ikke et tal ( NaN
)
Enhver operation, der involverer uendelighed, giver uendelig. Nå, de fleste, men ikke alle.
Flydende kommatal kan gemme en anden speciel værdi: NaN
. Det er en forkortelse for N ot a N umber (ikke et tal).
I matematik, hvis du dividerer uendelighed med uendelig, er resultatet udefineret.
Men i Java, hvis du dividerer uendelighed med uendelig, er resultatet NaN
.
Eksempler:
Kode | Bemærk |
---|---|
|
|
|
|
|
|
Enhver operation med NaN
udbytte NaN
.
5. char
type
Blandt Javas primitive typer fortjener man noget særlig opmærksomhed: typen char
. Dens navn kommer fra ordet tegn , og selve typen bruges til at gemme tegn .
Karakterer er hvad strenge er lavet af, ikke? Strenge er en række karakterer.
Men endnu mere interessant er det, at char
typen også er en numerisk type ! Det er en type med dobbelt formål, så at sige.
Virkeligheden er, at char
typen faktisk ikke har karakterer. I stedet gemmer den tegnkoder fra Unicode-kodningen. Hvert tegn svarer til et tal: tegnets numeriske kode.
Hver char
variabel optager to bytes i hukommelsen (det samme som short
typen). Men i modsætning til short
typen char
er heltalstypen usigneret og kan gemme værdier fra 0
til 65,535
.
Typen char
er en hybrid type. Dens værdier kan tolkes både som tal (f.eks. kan de lægges sammen og ganges) og som tegn. Dette blev gjort, fordi selvom karakterer er visuelle repræsentationer, er de for en computer frem for alt kun tal. Og det er meget mere praktisk at arbejde med dem som tal.
Unicode
Unicode er en speciel tabel (kodning), der indeholder alle tegn i verden. Og hver karakter har sit eget nummer. Det ser omtrent sådan ud:
Der er forskellige måder at tildele en værdi til en char
variabel.
Kode | Beskrivelse |
---|---|
|
Variablen a vil indeholde det latinske bogstav A . |
|
Variablen a vil indeholde det latinske bogstav A . Dens kode er 65 . |
|
Variablen a vil indeholde det latinske bogstav A . Dens kode er 65 , som er lig 41 i det hexadecimale system. |
|
Variablen a vil indeholde det latinske bogstav A . Dens kode er 65 , som er lig 41 i det hexadecimale system. De to ekstra nuller ændrer intet. |
|
Variablen a vil indeholde det latinske bogstav A . En anden måde at definere et tegn ved dets kode. |
Oftest angiver folk blot tegnet i anførselstegn (som i den første række i tabellen). Når det er sagt, er sidstnævnte metode også populær. Dens fordel er, at den kan bruges i strenge.
Og som vi sagde, char
er typen også en heltalstype, så du kan skrive noget som dette:
Kode | Konsoludgang |
---|---|
|
Det latinske bogstav B vil blive vist på skærmen. Fordi: A – 65 B – 66 C –67 |
Arbejder med char
s
Hver char
er først og fremmest et tal (tegnkode) og derefter et tegn. Hvis du kender en tegnkode, kan du altid få tegnet i dit program. Eksempel:
Kode | Konsoludgang |
---|---|
|
|
Standard koder
Her er de mest kendte tegnkoder:
Karakterer | 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 sidste primitive type er boolean
.
Som du allerede ved, kan det kun tage to værdier: true
og false
.
Og med det ved du allerede alt, hvad der er at vide om denne type.
GO TO FULL VERSION