1. Integer
klass
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 Integer
har två fält som innehåller de högsta och lägsta möjliga värdena av int
typen:
Fält | Beskrivning |
---|---|
|
Högsta möjliga värde av int typen |
|
Minsta möjliga värde av int typen |
Ibland vill man tilldela det minsta eller största möjliga int
vä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 Integer
har 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 int i ett Integer fö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. Double
klass
I allmänhet Double
liknar klassen klassen Integer
, bara den innehåller en double
snarare ä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 Double
har 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 double typen |
|
Högsta möjliga värde av double typen |
Oändlighet
Om du dividerar -1.0
med 0.0
får du negativ oändlighet. Om du delar 1.0
med 0.0
får du positiv oändlighet. Du kan inte bara dividera a double
med 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.10x
2x
1
MIN_EXPONENT == -1024
, vilket betyder , vilket är ungefär lika med2-1024
10-308
Och naturligtvis Double
har 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 double i ett Double objekt |
|
Returnerar talet som erhållits från den godkända strängen |
Intressant nog finns det en isInfinite()
metod som returnerar true
om 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. Character
klass
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. Boolean
klass
Typen Boolean
är praktiskt taget densamma som boolean
typen. 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 . true TRUE false FALSE |
Typen Boolean
har 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 boolean
typen:
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 equals och == 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 boolean
och Boolean
typerna:
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 Boolean
objekt 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 Boolean
insidan 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 int
och en , konverteras Integer
den till en :Integer
int
Hur det är skrivet | Hur det fungerar |
---|---|
|
|
Om du jämför två Integer
objekt med varandra konverteras de inte till int
s:
Koda | Konsolutgång |
---|---|
|
|
a == c
och , 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 == c
a != b
a
b
Överraskning
Men om vi ersätter 500
med 100
får vi ett helt annat resultat:
Koda | Konsolutgång |
---|---|
|
|
Problemet här är att ett nytt Integer
objekt inte alltid skapas under autoboxning . Objekt cachelagras för värden -128
genom 127
inkluderande.
Klassen Integer
har en dold array som lagrar objekt: Integer(-128)
, Integer(-127)
, ... Integer(126)
,Integer(127)
Om du skriver Integer x = 128
skapar autoboxningsprocessen ett nytt objekt, men om du skriver Integer x = 127
hämtar autoboxningsprocessen det befintliga objektet från cachen (från arrayen).
Om du inte vill att Integer
objektet 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 Boolean
typen är dess TRUE
och FALSE
värden båda konstanter, så de är också i huvudsak cachade.
GO TO FULL VERSION