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
Integer.MAX_VALUE
Maksimal mulig verdi av inttypen
Integer.MIN_VALUE
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
int min = Integer.MIN_VALUE;
min == 0x80000000

Klassen Integerhar også noen interessante metoder. Her er de:

Metoder Beskrivelse
String Integer.toHexString(int)
Returnerer en streng som er den heksadesimale representasjonen av tallet
String Integer.toBinaryString(int)
Returnerer en streng som er den binære representasjonen av tallet
String Integer.toOctalString(int)
Returnerer en streng som er den oktale representasjonen av tallet
Integer Integer.valueOf(int i)
Pakker det beståtte intinn i en Integergjenstand
Integer Integer.parseInt(String)
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
double Double.NEGATIVE_INFINITY
Negativ uendelighet
double Double.POSITIVE_INFINITY
Positiv uendelighet
int Double.MIN_EXPONENT
Minimum mulig eksponent (2 x )
int Double.MAX_EXPONENT
Maksimal mulig eksponent (2 x )
double Double.MIN_VALUE
Minimum mulig verdi av doubletypen
double Double.MAX_VALUE
Maksimal mulig verdi av doubletypen

evighet

Hvis du deler -1.00.0får du negativ uendelighet. Hvis du deler 1.00.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
String Double.toHexString(double)
Returnerer en streng som er den heksadesimale representasjonen av tallet
boolean Double.isInfinite(double)
Sjekker om det beståtte tallet er uendelig.
boolean Double.isNaN(double)
Sjekker om bestått nummer erNaN
Double Double.valueOf(double)
Pakker det beståtte doubleinn i en Doublegjenstand
Double Double.parseDouble(String)
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
Character.isAlphabetic(int)
Sjekker om et tegn er et alfabetisk tegn
Character.isLetter(char)
Sjekker om tegnet er en bokstav
Character.isDigit(char)
Sjekker om tegnet er et siffer
Character.isSpaceChar(char)
Sjekker om tegnet er et mellomrom, et linjeskift eller et sideskift (koder: 12, 13, 14)
Character.isWhitespace(char)
Sjekker om tegnet er mellomrom: et mellomrom, tabulator osv.
Character.isLowerCase(char)
Sjekker om tegnet er små bokstaver
Character.isUpperCase(char)
Sjekker om tegnet er med store bokstaver
Character.toLowerCase(char)
Konverterer tegnet til små bokstaver
Character.toUpperCase(char)
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
class Boolean
{
   public static final Boolean TRUE = new Boolean(true);
   public static final Boolean FALSE = new Boolean(false);

   private final boolean value;

   public Boolean(boolean value)
   {
      this.value = value;
   }

   public boolean booleanValue()
   {
      return value;
   }

   public static Boolean valueOf(boolean value)
   {
      return (value ? TRUE : FALSE);
   }
}


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
Boolean.TRUE
true
ekte
Boolean.FALSE
false
falsk

Du kan jobbe med dem på samme måte som du jobber med booleantypen:

Kode Merk
if (Boolean.TRUE)
{
}
Klassen Booleaner den eneste klassen som kan skrives i en betingelse
Boolean a = Boolean.TRUE;
boolean b = Boolean.TRUE;
boolean c = true;
Alle tre variablene er lik true/TRUE
Boolean a = Boolean.TRUE;
Boolean b = Boolean.TRUE;
if (a == b)
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
Boolean a = true;
Boolean b = true;
Boolean c = false;
boolean d = a;
Boolean a = Boolean.valueOf(true);
Boolean b = Boolean.valueOf(true);
Boolean c = Boolean.valueOf(false);
boolean d = a.booleanValue();

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
Boolean less = (2 < 3);
if (less)
{
   ...
}
Dette vil kompilere og fungere

Dette vil kompilere, men det vil ikke fungere!

Kode Merk
Boolean less = null;
if (less)
{
   ...
}

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
int a = 5;
Integer b = 5;
if (a == b)
{
   ...
}
int a = 5;
Integer b = Integer.valueOf(5);
if (a == b.intValue())
{
   ...
}

Hvis du sammenligner to Integerobjekter med hverandre, blir de ikke konvertert til ints:

Kode Konsollutgang
Integer a = 500;
Integer b = 500;
int c = 500;

System.out.println(a == b); // Compared by reference
System.out.println(a == c);
System.out.println(b == c);




false
true
true

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
Integer a = 100;
Integer b = 100;
int c = 100;

System.out.println(a == b); // Compared by reference
System.out.println(a == c);
System.out.println(b == c);




true
true
true

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.