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 trueog 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, intog long. De er forskjellige i størrelse og rekkevidde av verdier de kan lagre.
inttype
Den mest brukte er inttypen. 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,648til +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 lengthinneholder lengden på matrisen. |
shorttype
Typen shorthar fått navnet sitt fra short int. Det kalles også ofte et kort heltall . I motsetning til inttypen er dens lengde bare to byte og rekkevidden av mulige verdier er fra -32,768til +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 inteller shortbetyr noe.
longtype
Denne typen får navnet sitt fra long intog kalles også et langt heltall . I motsetning til inttypen 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 intstandard heltallstype, og å bruke longtypen bare når det virkelig var nødvendig.
bytetype
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 bytetypen: fra -128til +127. Men det er ikke dens styrke. Typen bytebrukes oftest når du skal lagre en stor blob-data i minnet. En rekke bytes 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 bytearray 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 thousandthssom 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: doubleog 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.321kan 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*1069876543216
floattype
Navnet på floattypen 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*10383.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 floattypen ikke er veldig populær blant Java-programmerere.
doubletype
Typen doubleer standard flytende kommatype. Navnet kommer fra dobbel presisjons flyttall . Alle virkelige bokstaver er doubles 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*103081.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 floattypen, er avgjørende: 99 % av alle operasjoner med reelle tall utføres ved bruk av doubletypen.
11bits er tildelt for eksponenten, noe som betyr at du kan lagre potenser på ti fra -323til +308(det er en potens av to fra -1024til +1023). Typen doublekan 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 NaNutbytte NaN.
5. chartype
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 chartypen også er en numerisk type ! Det er en type med to formål, for å si det sånn.
Realiteten er at chartypen faktisk ikke har karakterer. I stedet lagrer den tegnkoder fra Unicode-kodingen. Hvert tegn tilsvarer et tall: tegnets numeriske kode.
Hver charvariabel opptar to byte i minnet (det samme som shorttypen). Men i motsetning til shorttypen, charer heltallstypen usignert og kan lagre verdier fra 0til 65,535.
Typen charer 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 charvariabel.
| Kode | Beskrivelse |
|---|---|
|
Variabelen avil inneholde den latinske bokstaven A. |
|
Variabelen avil inneholde den latinske bokstaven A. Koden er 65. |
|
Variabelen avil inneholde den latinske bokstaven A. Koden er 65, som er lik 41i det heksadesimale systemet. |
|
Variabelen avil inneholde den latinske bokstaven A. Koden er 65, som er lik 41i det heksadesimale systemet. De to ekstra nullene endrer ingenting. |
|
Variabelen avil 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, chartypen er også en heltallstype, så du kan skrive noe som dette:
| Kode | Konsollutgang |
|---|---|
|
Den latinske bokstaven Bvil vises på skjermen. Fordi: A– 65B– 66C–67 |
Arbeider med chars
Hver charer 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. booleantype
Og den siste primitive typen er boolean.
Som du allerede vet, kan det bare ta to verdier: trueog false.
Og med det vet du allerede alt som er å vite om denne typen.
GO TO FULL VERSION