1. Integer
klasse
Integer
er også god ved at det er en klasse, hvilket betyder at den kan have felter og metoder. Og selvfølgelig har den dem. Mange af dem - snesevis af dem. Her vil vi overveje de mest grundlæggende.
Klassen Integer
har to felter, der indeholder de maksimale og mindst mulige værdier af int
typen:
Mark | Beskrivelse |
---|---|
|
Maksimal mulig værdi af int typen |
|
Minimum mulig værdi af int typen |
Nogle gange vil du tildele den mindste eller størst mulige int
værdi til en variabel. For at undgå at fylde din kode med uforståelige konstanter, kan du skrive dette meget tydeligt som følger:
Kode | Beskrivelse |
---|---|
|
|
Klassen Integer
har også nogle interessante metoder. Her er de:
Metoder | Beskrivelse |
---|---|
|
Returnerer en streng, der er den hexadecimale repræsentation af tallet |
|
Returnerer en streng, der er den binære repræsentation af tallet |
|
Returnerer en streng, der er den oktale repræsentation af tallet |
|
Indpakker det beståede int i en Integer genstand |
|
Returnerer tallet opnået fra den beståede streng |
Du har tidligere stødt på den statiske Integer.parseInt()
metode. Lad os huske, hvordan det fungerer:
int name = Integer.parseInt(string);
Hvis en streng, der indeholder et tal (kun cifre) sendes til parseInt()
metoden, vil den parse strengen og returnere det tal, den indeholder.
Resten af metoderne er også nyttige. For eksempel kan nogle af dem konvertere et bestået tal til en streng, der indeholder den binære, oktale eller hexadecimale repræsentation af tallet.
2. Double
klasse
Generelt Double
ligner klassen klassen Integer
, kun den omslutter en double
snarere end en int
. Det har også områder og metoder, som vil være interessante for os. Overvej et par af dem:
Klassen Double
har seks interessante felter:
Mark | Beskrivelse |
---|---|
|
Negativ uendelighed |
|
Positiv uendelighed |
|
Minimum mulig eksponent (2 x ) |
|
Maksimal mulig eksponent (2 x ) |
|
Minimum mulig værdi af double typen |
|
Maksimal mulig værdi af double typen |
Uendelighed
Hvis du dividerer -1.0
med 0.0
, får du negativ uendelighed. Hvis du dividerer 1.0
med 0.0
, får du positiv uendelighed. Ikke kun kan du dividere a double
med nul, men du kan også bruge det til at gemme resultatet af disse operationer.
Eksponent for endouble
Det er nemt at forstå eksponenten. Internt består en double af en mantisse og en eksponent. Men her er værdien af eksponenten ikke , men . Hvis eksponenten stiger med , vil den samlede værdi af tallet fordobles.10x
2x
1
MIN_EXPONENT == -1024
, hvilket betyder , som er omtrent lig med2-1024
10-308
Og selvfølgelig Double
har klassen interessante metoder:
Metoder | Beskrivelse |
---|---|
|
Returnerer en streng, der er den hexadecimale repræsentation af tallet |
|
Kontrollerer, om det beståede tal er uendeligt. |
|
Kontrollerer, om det beståede nummer erNaN |
|
Indpakker det beståede double i en Double genstand |
|
Returnerer tallet opnået fra den beståede streng |
Interessant nok er der en isInfinite()
metode, der returnerer true
, hvis det beståede tal er positivt eller negativt uendeligt.
Metoden isNaN()
ligner - den kontrollerer, om det beståede tal er NaN
( Not-a-Number , en speciel konstant, der angiver en udefineret værdi).
3. Character
klasse
Klassen Character
er først og fremmest interessant for dens store antal statiske hjælpemetoder, der lader dig kontrollere, om tegn tilhører forskellige kategorier.
Eksempler
Metoder | Beskrivelse |
---|---|
|
Kontrollerer, om et tegn er et alfabetisk tegn |
|
Kontrollerer, om tegnet er et bogstav |
|
Kontrollerer, om tegnet er et ciffer |
|
Kontrollerer, om tegnet er et mellemrum, et linjeskift eller et sideskift (koder: 12, 13, 14) |
|
Kontrollerer, om tegnet er mellemrum: et mellemrum, tabulator osv. |
|
Kontrollerer, om tegnet er småt |
|
Kontrollerer, om tegnet er stort |
|
Konverterer tegnet til små bogstaver |
|
Konverterer tegnet til store bogstaver |
Et træk ved disse metoder er, at de fungerer med alle kendte alfabeter: Arabiske tal klassificeres som cifre osv.
4. Boolean
klasse
Typen Boolean
er stort set den samme som boolean
typen. Forskellene er minimale.
Nedenfor viser vi en forenklet version af klassen Boolean
:
Kode | Beskrivelse |
---|---|
|
Konstanter : TRUE и FALSE Variabelklassekonstruktør Metoden returnerer værdien af den interne variabel Denne statiske metode konverterer Boolean til og til . true TRUE false FALSE |
Typen Boolean
har to konstanter (to felter):
Klassens konstanter | Modstykke til den booleske type | Beskrivelse |
---|---|---|
|
|
rigtigt |
|
|
falsk |
Du kan arbejde med dem på samme måde, som du arbejder med boolean
typen:
Kode | Bemærk |
---|---|
|
Klassen Boolean er den eneste klasse, der kan skrives inde i en betingelse |
|
Alle tre variabler er lig med true /TRUE |
|
Konstanter kan sammenlignes ved at bruge begge, equals og == dette vil også virke. |
Autoboxing fungerer godt her. Det betyder, at du kan bruge denne type på samme måde som typen boolean
- der er ingen faldgruber at passe på.
hvordan det er skrevet | Hvordan det virker |
---|---|
|
|
Og her en sammenligning af boolean
og Boolean
typerne:
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 har brug for et uafhængigt Boolean
objekt, skal du oprette det eksplicit:
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)
Endnu et eksempel, hvor vi vil bruge en Boolean
inderside af en if
:
Kode | Bemærk |
---|---|
|
Dette vil kompilere og fungere |
Dette vil kompilere, men det virker ikke!
Kode | Bemærk |
---|---|
|
Fejl . Denne linje vil give en undtagelse |
5. Caching værdier under autoboxing
Der er nogle faldgruber relateret til heltalsindpakningstyper.
Som du allerede ved, hvis vi sammenligner en int
og en Integer
, Integer
konverteres den til en int
:
hvordan det er skrevet | Hvordan det virker |
---|---|
|
|
Hvis du sammenligner to Integer
objekter med hinanden, konverteres de ikke til int
s:
Kode | Konsoludgang |
---|---|
|
|
a == c
og , men , fordi når vi sammenligner, og vi sammenligner referencer. Hvilket i bund og grund er, hvad vi ville forvente.b == c
a != b
a
b
Overraskelse
Men hvis vi erstatter 500
med 100
, så får vi et helt andet resultat:
Kode | Konsoludgang |
---|---|
|
|
Problemet her er, at et nyt Integer
objekt ikke altid oprettes under autoboxing . Objekter cachelagres for værdier -128
gennem 127
inklusive.
Klassen Integer
har et skjult array, der gemmer objekter: Integer(-128)
, Integer(-127)
, ... Integer(126)
,Integer(127)
Hvis du skriver Integer x = 128
, så opretter autoboxing-processen et nyt objekt, men hvis du skriver Integer x = 127
, så henter autoboxing-processen det eksisterende objekt fra cachen (fra arrayet).
Hvis du ikke ønsker, at Integer
objektet skal komme fra cachen, skal du oprette det eksplicit ved at skrive:Integer x = new Integer(127);
Alle indpakningstyper har sådan en cache: Integer
, Long
, Byte
, Short
, Boolean
. For Boolean
typen er dens TRUE
og FALSE
værdier begge konstanter, så de er også i det væsentlige cachelagret.
GO TO FULL VERSION