1. Integer
klasse
Integer
er også bra ved at det er en klasse, noe som betyr at den kan ha felt og metoder. Og selvfølgelig har den dem. Mange av dem - dusinvis av dem. Her skal vi vurdere de mest grunnleggende.
Klassen Integer
har to felt som inneholder maksimum og minimum mulige verdier av int
typen:
Felt | Beskrivelse |
---|---|
|
Maksimal mulig verdi av int typen |
|
Minimum mulig verdi av int typen |
Noen ganger vil du tilordne den minste eller størst mulige int
verdien til en variabel. For å unngå å fylle koden med uforståelige konstanter, kan du skrive dette veldig tydelig som følger:
Kode | Beskrivelse |
---|---|
|
|
Klassen Integer
har også noen interessante metoder. Her er de:
Metoder | Beskrivelse |
---|---|
|
Returnerer en streng som er den heksadesimale representasjonen av tallet |
|
Returnerer en streng som er den binære representasjonen av tallet |
|
Returnerer en streng som er den oktale representasjonen av tallet |
|
Pakker det beståtte int inn i en Integer gjenstand |
|
Returnerer tallet hentet fra den beståtte strengen |
Du har tidligere møtt den statiske Integer.parseInt()
metoden. La oss huske hvordan det fungerer:
int name = Integer.parseInt(string);
Hvis en streng som inneholder et tall (bare sifre) sendes til parseInt()
metoden, vil den analysere strengen og returnere nummeret den inneholder.
Resten av metodene er også nyttige. For eksempel kan noen av dem konvertere et bestått tall til en streng som inneholder den binære, oktale eller heksadesimale representasjonen av tallet.
2. Double
klasse
Generelt Double
er klassen lik Integer
klassen, bare den omslutter en double
snarere enn en int
. Den har også felt og metoder som vil være av interesse for oss. Tenk på noen av dem:
Klassen Double
har seks interessante felt:
Felt | Beskrivelse |
---|---|
|
Negativ uendelighet |
|
Positiv uendelighet |
|
Minimum mulig eksponent (2 x ) |
|
Maksimal mulig eksponent (2 x ) |
|
Minimum mulig verdi av double typen |
|
Maksimal mulig verdi av double typen |
evighet
Hvis du deler -1.0
på 0.0
får du negativ uendelighet. Hvis du deler 1.0
på 0.0
får du positiv uendelighet. Ikke bare kan du dele a double
med null, men du kan også bruke den til å lagre resultatet av disse operasjonene.
Eksponent for endouble
Det er enkelt å forstå eksponenten. Internt består en dobbel av en mantisse og en eksponent. Men her er verdien av eksponenten ikke , men . Dermed, hvis eksponenten øker med , vil den totale verdien av tallet dobles.10x
2x
1
MIN_EXPONENT == -1024
, som betyr , som er omtrent lik2-1024
10-308
Og selvfølgelig Double
har klassen interessante metoder:
Metoder | Beskrivelse |
---|---|
|
Returnerer en streng som er den heksadesimale representasjonen av tallet |
|
Sjekker om det beståtte tallet er uendelig. |
|
Sjekker om bestått nummer erNaN |
|
Pakker det beståtte double inn i en Double gjenstand |
|
Returnerer tallet hentet fra den beståtte strengen |
Interessant nok er det en isInfinite()
metode som returnerer true
hvis det beståtte tallet er positivt eller negativt uendelig.
Metoden isNaN()
er lik - den sjekker om det beståtte tallet er NaN
( Not-a-Number , en spesiell konstant som indikerer en udefinert verdi).
3. Character
klasse
Klassen Character
er først og fremst interessant for sitt store antall statiske verktøymetoder som lar deg sjekke om tegn tilhører ulike kategorier.
Eksempler
Metoder | Beskrivelse |
---|---|
|
Sjekker om et tegn er et alfabetisk tegn |
|
Sjekker om tegnet er en bokstav |
|
Sjekker om tegnet er et siffer |
|
Sjekker om tegnet er et mellomrom, et linjeskift eller et sideskift (koder: 12, 13, 14) |
|
Sjekker om tegnet er mellomrom: et mellomrom, tabulator osv. |
|
Sjekker om tegnet er små bokstaver |
|
Sjekker om tegnet er med store bokstaver |
|
Konverterer tegnet til små bokstaver |
|
Konverterer tegnet til store bokstaver |
Et trekk ved disse metodene er at de fungerer med alle kjente alfabeter: Arabiske tall er klassifisert som sifre osv.
4. Boolean
klasse
Typen Boolean
er praktisk talt den samme som boolean
typen. Forskjellene er minimale.
Nedenfor viser vi en forenklet versjon av klassen Boolean
:
Kode | Beskrivelse |
---|---|
|
Konstanter : TRUE и FALSE Variabelklassekonstruktør Metoden returnerer verdien til den interne variabelen Denne statiske metoden konverterer Boolean til og til . true TRUE false FALSE |
Typen Boolean
har to konstanter (to felt):
Klassens konstanter | Motstykke for den boolske typen | Beskrivelse |
---|---|---|
|
|
ekte |
|
|
falsk |
Du kan jobbe med dem på samme måte som du jobber med boolean
typen:
Kode | Merk |
---|---|
|
Klassen Boolean er den eneste klassen som kan skrives i en betingelse |
|
Alle tre variablene er lik true /TRUE |
|
Konstanter kan sammenlignes ved å bruke begge, equals og == dette vil også fungere. |
Autoboksing fungerer utmerket her. Det betyr at du kan bruke denne typen på samme måte som typen boolean
- det er ingen fallgruver å se opp for.
Hvordan det er skrevet | Hvordan det fungerer |
---|---|
|
|
Og her en sammenligning av boolean
og Boolean
typene:
boolean a = true;
Boolean b = true; // b will be equal to Boolean.TRUE
Boolean c = true; // c will be equal to Boolean.TRUE
a == b; // true (compared by value)
a == c; // true (compared by value)
b == c; // true (compared by reference, but they point to the same object)
Hvis du virkelig trenger et uavhengig Boolean
objekt, må du lage det eksplisitt:
boolean a = true;
Boolean b = new Boolean(true); // New Boolean object
Boolean c = true; // c will be equal to Boolean.TRUE
a == b; // true (compared by value)
a == c; // true (compared by value)
b == c; // false (compared by reference, and they point to different objects)
Et eksempel til, hvor vi bruker en Boolean
innside i en if
:
Kode | Merk |
---|---|
|
Dette vil kompilere og fungere |
Dette vil kompilere, men det vil ikke fungere!
Kode | Merk |
---|---|
|
Feil . Denne linjen vil gi et unntak |
5. Bufre verdier under autoboksing
Det er noen fallgruver knyttet til heltalls innpakningstyper.
Som du allerede vet, hvis vi sammenligner en int
og en Integer
, Integer
konverteres den til en int
:
Hvordan det er skrevet | Hvordan det fungerer |
---|---|
|
|
Hvis du sammenligner to Integer
objekter med hverandre, blir de ikke konvertert til int
s:
Kode | Konsollutgang |
---|---|
|
|
a == c
og , men , fordi når vi sammenligner og vi sammenligner referanser. Noe vi egentlig forventer.b == c
a != b
a
b
Overraskelse
Men hvis vi erstatter 500
med 100
, får vi et helt annet resultat:
Kode | Konsollutgang |
---|---|
|
|
Problemet her er at et nytt Integer
objekt ikke alltid opprettes under autoboksing . Objekter bufres for verdier -128
gjennom 127
inkluderende.
Klassen Integer
har en skjult matrise som lagrer objekter: Integer(-128)
, Integer(-127)
, ... Integer(126)
,Integer(127)
Hvis du skriver Integer x = 128
, oppretter autoboksprosessen et nytt objekt, men hvis du skriver Integer x = 127
, henter autoboksprosessen det eksisterende objektet fra hurtigbufferen (fra arrayet).
Hvis du ikke vil at Integer
objektet skal komme fra cachen, må du opprette det eksplisitt ved å skrive:Integer x = new Integer(127);
Alle innpakningstyper har en slik cache: Integer
, Long
, Byte
, Short
, Boolean
. For Boolean
typen er dens TRUE
og FALSE
verdiene begge konstanter, så de er også i hovedsak bufret.
GO TO FULL VERSION