1. Integerklasse
Integerer 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 Integerhar to felt som inneholder maksimum og minimum mulige verdier av inttypen:
| Felt | Beskrivelse |
|---|---|
|
Maksimal mulig verdi av inttypen |
|
Minimum mulig verdi av inttypen |
Noen ganger vil du tilordne den minste eller størst mulige intverdien til en variabel. For å unngå å fylle koden med uforståelige konstanter, kan du skrive dette veldig tydelig som følger:
| Kode | Beskrivelse |
|---|---|
|
|
Klassen Integerhar 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 intinn i en Integergjenstand |
|
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. Doubleklasse
Generelt Doubleer klassen lik Integerklassen, bare den omslutter en doublesnarere enn en int. Den har også felt og metoder som vil være av interesse for oss. Tenk på noen av dem:
Klassen Doublehar seks interessante felt:
| Felt | Beskrivelse |
|---|---|
|
Negativ uendelighet |
|
Positiv uendelighet |
|
Minimum mulig eksponent (2 x ) |
|
Maksimal mulig eksponent (2 x ) |
|
Minimum mulig verdi av doubletypen |
|
Maksimal mulig verdi av doubletypen |
evighet
Hvis du deler -1.0på 0.0får du negativ uendelighet. Hvis du deler 1.0på 0.0får du positiv uendelighet. Ikke bare kan du dele a doublemed 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.10x2x1
MIN_EXPONENT == -1024, som betyr , som er omtrent lik2-102410-308
Og selvfølgelig Doublehar 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 doubleinn i en Doublegjenstand |
|
Returnerer tallet hentet fra den beståtte strengen |
Interessant nok er det en isInfinite()metode som returnerer truehvis 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. Characterklasse
Klassen Characterer 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. Booleanklasse
Typen Booleaner praktisk talt den samme som booleantypen. 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 Booleantil og til . trueTRUEfalseFALSE |
Typen Booleanhar 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 booleantypen:
| Kode | Merk |
|---|---|
|
Klassen Booleaner den eneste klassen som kan skrives i en betingelse |
|
Alle tre variablene er lik true/TRUE |
|
Konstanter kan sammenlignes ved å bruke begge, equalsog == 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 booleanog Booleantypene:
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 Booleanobjekt, 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 Booleaninnside 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 intog en Integer, Integerkonverteres den til en int:
| Hvordan det er skrevet | Hvordan det fungerer |
|---|---|
|
|
Hvis du sammenligner to Integerobjekter med hverandre, blir de ikke konvertert til ints:
| Kode | Konsollutgang |
|---|---|
|
|
a == cog , men , fordi når vi sammenligner og vi sammenligner referanser. Noe vi egentlig forventer.b == ca != bab
Overraskelse
Men hvis vi erstatter 500med 100, får vi et helt annet resultat:
| Kode | Konsollutgang |
|---|---|
|
|
Problemet her er at et nytt Integerobjekt ikke alltid opprettes under autoboksing . Objekter bufres for verdier -128gjennom 127inkluderende.
Klassen Integerhar 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 Integerobjektet 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 Booleantypen er dens TRUEog FALSEverdiene begge konstanter, så de er også i hovedsak bufret.
GO TO FULL VERSION