1. Integerklass
Integerär också bra genom att det är en klass, vilket betyder att den kan ha fält och metoder. Och naturligtvis har den dem. Många av dem - dussintals av dem. Här kommer vi att överväga de mest grundläggande.
Klassen Integerhar två fält som innehåller de högsta och lägsta möjliga värdena av inttypen:
| Fält | Beskrivning |
|---|---|
|
Högsta möjliga värde av inttypen |
|
Minsta möjliga värde av inttypen |
Ibland vill man tilldela det minsta eller största möjliga intvärdet till en variabel. För att undvika att belamra din kod med obegripliga konstanter kan du skriva detta väldigt tydligt så här:
| Koda | Beskrivning |
|---|---|
|
|
Klassen Integerhar också några intressanta metoder. Här är de:
| Metoder | Beskrivning |
|---|---|
|
Returnerar en sträng som är den hexadecimala representationen av talet |
|
Returnerar en sträng som är den binära representationen av talet |
|
Returnerar en sträng som är den oktala representationen av talet |
|
Slår in det godkända inti ett Integerföremål |
|
Returnerar talet som erhållits från den godkända strängen |
Du har tidigare stött på den statiska Integer.parseInt()metoden. Låt oss komma ihåg hur det fungerar:
int name = Integer.parseInt(string);
Om en sträng som innehåller ett nummer (endast siffror) skickas till parseInt()metoden, kommer den att analysera strängen och returnera numret den innehåller.
Resten av metoderna är också användbara. Till exempel kan några av dem konvertera ett passerat tal till en sträng som innehåller den binära, oktala eller hexadecimala representationen av talet.
2. Doubleklass
I allmänhet Doubleliknar klassen klassen Integer, bara den innehåller en doublesnarare än en int. Den har också områden och metoder som kommer att vara av intresse för oss. Tänk på några av dem:
Klassen Doublehar sex intressanta fält:
| Fält | Beskrivning |
|---|---|
|
Negativ oändlighet |
|
Positiv oändlighet |
|
Minsta möjliga exponent (2 x ) |
|
Maximal möjlig exponent (2 x ) |
|
Minsta möjliga värde av doubletypen |
|
Högsta möjliga värde av doubletypen |
Oändlighet
Om du dividerar -1.0med 0.0får du negativ oändlighet. Om du delar 1.0med 0.0får du positiv oändlighet. Du kan inte bara dividera a doublemed noll, utan du kan också använda den för att lagra resultatet av dessa operationer.
Exponent för adouble
Det är lätt att förstå exponenten. Internt består en dubbel av en mantissa och en exponent. Men här är värdet på exponenten inte , men . Således, om exponenten ökar med , kommer det totala värdet av talet att fördubblas.10x2x1
MIN_EXPONENT == -1024, vilket betyder , vilket är ungefär lika med2-102410-308
Och naturligtvis Doublehar klassen intressanta metoder:
| Metoder | Beskrivning |
|---|---|
|
Returnerar en sträng som är den hexadecimala representationen av talet |
|
Kontrollerar om det godkända numret är oändligt. |
|
Kontrollerar om det godkända numret ärNaN |
|
Slår in det godkända doublei ett Doubleobjekt |
|
Returnerar talet som erhållits från den godkända strängen |
Intressant nog finns det en isInfinite()metod som returnerar trueom det godkända talet är positivt eller negativt oändligt.
Metoden isNaN()är liknande — den kontrollerar om det godkända numret är NaN( Not-a-Number , en speciell konstant som indikerar ett odefinierat värde).
3. Characterklass
Klassen Characterär intressant främst för sitt stora antal statiska verktygsmetoder som låter dig kontrollera om tecken tillhör olika kategorier.
Exempel
| Metoder | Beskrivning |
|---|---|
|
Kontrollerar om ett tecken är ett alfabetiskt tecken |
|
Kontrollerar om tecknet är en bokstav |
|
Kontrollerar om tecknet är en siffra |
|
Kontrollerar om tecknet är ett mellanslag, en radbrytning eller en sidbrytning (koder: 12, 13, 14) |
|
Kontrollerar om tecknet är blanksteg: ett mellanslag, en tabb, etc. |
|
Kontrollerar om tecknet är gement |
|
Kontrollerar om tecknet är versaler |
|
Konverterar tecknet till gemener |
|
Konverterar tecknet till versaler |
En egenskap hos dessa metoder är att de fungerar med alla kända alfabet: Arabiska siffror klassificeras som siffror, etc.
4. Booleanklass
Typen Booleanär praktiskt taget densamma som booleantypen. Skillnaderna är minimala.
Nedan visar vi en förenklad version av klassen Boolean:
| Koda | Beskrivning |
|---|---|
|
Konstanter: TRUEи FALSE Variabelklasskonstruktor Metoden returnerar värdet på den interna variabeln Denna statiska metod konverterar till och till Boolean. trueTRUEfalseFALSE |
Typen Booleanhar två konstanter (två fält):
| Klassens konstanter | Motsvarighet för den booleska typen | Beskrivning |
|---|---|---|
|
|
Sann |
|
|
falsk |
Du kan arbeta med dem på samma sätt som du arbetar med booleantypen:
| Koda | Notera |
|---|---|
|
Klassen Booleanär den enda klassen som kan skrivas i ett villkor |
|
Alla tre variablerna är lika med true/TRUE |
|
Konstanter kan jämföras med båda equalsoch == detta kommer också att fungera. |
Autoboxning fungerar utmärkt här. Det betyder att du kan använda den här typen på samma sätt som typen boolean- det finns inga fallgropar att se upp för.
| Hur det är skrivet | Hur det fungerar |
|---|---|
|
|
Och här en jämförelse av booleanoch Booleantyperna:
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)
Om du verkligen behöver ett oberoende Booleanobjekt måste du skapa det uttryckligen:
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)
Ytterligare ett exempel, där vi använder Booleaninsidan av en if:
| Koda | Notera |
|---|---|
|
Detta kommer att kompilera och fungera |
Detta kommer att kompileras, men det kommer inte att fungera!
| Koda | Notera |
|---|---|
|
Fel . Den här raden ger ett undantag |
5. Cachning av värden under autoboxning
Det finns några fallgropar relaterade till heltalsomslagstyper.
Som du redan vet, om vi jämför en intoch en , konverteras Integerden till en :Integerint
| Hur det är skrivet | Hur det fungerar |
|---|---|
|
|
Om du jämför två Integerobjekt med varandra konverteras de inte till ints:
| Koda | Konsolutgång |
|---|---|
|
|
a == coch , men , för när vi jämför och vi jämför referenser. Vilket är i princip vad vi förväntar oss.b == ca != bab
Överraskning
Men om vi ersätter 500med 100får vi ett helt annat resultat:
| Koda | Konsolutgång |
|---|---|
|
|
Problemet här är att ett nytt Integerobjekt inte alltid skapas under autoboxning . Objekt cachelagras för värden -128genom 127inkluderande.
Klassen Integerhar en dold array som lagrar objekt: Integer(-128), Integer(-127), ... Integer(126),Integer(127)
Om du skriver Integer x = 128skapar autoboxningsprocessen ett nytt objekt, men om du skriver Integer x = 127hämtar autoboxningsprocessen det befintliga objektet från cachen (från arrayen).
Om du inte vill att Integerobjektet ska komma från cachen måste du skapa det uttryckligen genom att skriva:Integer x = new Integer(127);
Alla omslagstyper har en sådan cache: Integer, Long, Byte, Short, Boolean. För Booleantypen är dess TRUEoch FALSEvärden båda konstanter, så de är också i huvudsak cachade.
GO TO FULL VERSION