1. Integerklasse
Integerer 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 Integerhar to felter, der indeholder de maksimale og mindst mulige værdier af inttypen:
| Mark | Beskrivelse |
|---|---|
|
Maksimal mulig værdi af inttypen |
|
Minimum mulig værdi af inttypen |
Nogle gange vil du tildele den mindste eller størst mulige intvæ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 Integerhar 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 inti en Integergenstand |
|
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. Doubleklasse
Generelt Doubleligner klassen klassen Integer, kun den omslutter en doublesnarere end en int. Det har også områder og metoder, som vil være interessante for os. Overvej et par af dem:
Klassen Doublehar seks interessante felter:
| Mark | Beskrivelse |
|---|---|
|
Negativ uendelighed |
|
Positiv uendelighed |
|
Minimum mulig eksponent (2 x ) |
|
Maksimal mulig eksponent (2 x ) |
|
Minimum mulig værdi af doubletypen |
|
Maksimal mulig værdi af doubletypen |
Uendelighed
Hvis du dividerer -1.0med 0.0, får du negativ uendelighed. Hvis du dividerer 1.0med 0.0, får du positiv uendelighed. Ikke kun kan du dividere a doublemed 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.10x2x1
MIN_EXPONENT == -1024, hvilket betyder , som er omtrent lig med2-102410-308
Og selvfølgelig Doublehar 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 doublei en Doublegenstand |
|
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. Characterklasse
Klassen Characterer 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. Booleanklasse
Typen Booleaner stort set den samme som booleantypen. 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 Booleantil og til . trueTRUEfalseFALSE |
Typen Booleanhar 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 booleantypen:
| Kode | Bemærk |
|---|---|
|
Klassen Booleaner 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, equalsog == 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 booleanog Booleantyperne:
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 Booleanobjekt, 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 Booleaninderside 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 intog en Integer, Integerkonverteres den til en int:
| hvordan det er skrevet | Hvordan det virker |
|---|---|
|
|
Hvis du sammenligner to Integerobjekter med hinanden, konverteres de ikke til ints:
| Kode | Konsoludgang |
|---|---|
|
|
a == cog , men , fordi når vi sammenligner, og vi sammenligner referencer. Hvilket i bund og grund er, hvad vi ville forvente.b == ca != bab
Overraskelse
Men hvis vi erstatter 500med 100, så får vi et helt andet resultat:
| Kode | Konsoludgang |
|---|---|
|
|
Problemet her er, at et nyt Integerobjekt ikke altid oprettes under autoboxing . Objekter cachelagres for værdier -128gennem 127inklusive.
Klassen Integerhar 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 Integerobjektet 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 Booleantypen er dens TRUEog FALSEværdier begge konstanter, så de er også i det væsentlige cachelagret.
GO TO FULL VERSION