1. Integer
klasse
Integer
is ook goed omdat het een klasse is, wat betekent dat het velden en methoden kan hebben. En natuurlijk heeft het ze. Veel van hen - tientallen van hen. Hier zullen we de meest elementaire bekijken.
De Integer
klasse heeft twee velden die de maximaal en minimaal mogelijke waarden van het int
type bevatten:
Veld | Beschrijving |
---|---|
|
Maximaal mogelijke waarde van het int type |
|
Minimaal mogelijke waarde van het int type |
Soms wil je de kleinst of grootst mogelijke waarde toekennen int
aan een variabele. Om te voorkomen dat uw code volloopt met onbegrijpelijke constanten, kunt u dit als volgt heel duidelijk schrijven:
Code | Beschrijving |
---|---|
|
|
De Integer
klas heeft ook een aantal interessante methoden. Daar zijn ze:
methoden | Beschrijving |
---|---|
|
Retourneert een tekenreeks die de hexadecimale weergave is van het getal |
|
Retourneert een tekenreeks die de binaire weergave is van het getal |
|
Retourneert een tekenreeks die de octale representatie is van het getal |
|
Wikkelt de pass int in een Integer object |
|
Retourneert het getal dat is verkregen uit de doorgegeven tekenreeks |
U bent eerder de statische Integer.parseInt()
methode tegengekomen. Laten we onthouden hoe het werkt:
int name = Integer.parseInt(string);
Als een tekenreeks met een getal (alleen cijfers) aan de parseInt()
methode wordt doorgegeven, zal deze de tekenreeks ontleden en het getal dat het bevat retourneren.
De rest van de methoden zijn ook nuttig. Sommigen van hen kunnen bijvoorbeeld een doorgegeven getal converteren naar een tekenreeks die de binaire, octale of hexadecimale weergave van het getal bevat.
2. Double
klasse
Over het algemeen is de Double
klasse vergelijkbaar met de Integer
klasse, alleen wordt er een double
in plaats van een int
. Het heeft ook velden en methoden die voor ons interessant zullen zijn. Overweeg er een paar:
De Double
klas heeft zes interessante velden:
Veld | Beschrijving |
---|---|
|
Negatieve oneindigheid |
|
Positieve oneindigheid |
|
Minimaal mogelijke exponent (2 x ) |
|
Maximaal mogelijke exponent (2 x ) |
|
Minimaal mogelijke waarde van het double type |
|
Maximaal mogelijke waarde van het double type |
Oneindigheid
Als je deelt -1.0
door 0.0
, krijg je negatief oneindig. Als je deelt 1.0
door 0.0
, krijg je positief oneindig. U kunt niet alleen a double
door nul delen, maar u kunt er ook het resultaat van deze bewerkingen in opslaan.
Exponent van eendouble
Het begrijpen van de exponent is eenvoudig. Intern bestaat een dubbel uit een mantisse en een exponent. Maar hier is de waarde van de exponent niet , maar . Dus als de exponent toeneemt met , zal de totale waarde van het getal verdubbelen.10x
2x
1
MIN_EXPONENT == -1024
, wat betekent , wat ongeveer gelijk is aan2-1024
10-308
En natuurlijk Double
heeft de klas interessante methoden:
methoden | Beschrijving |
---|---|
|
Retourneert een tekenreeks die de hexadecimale weergave is van het getal |
|
Controleert of het doorgegeven getal oneindig is. |
|
Controleert of het doorgegeven nummer isNaN |
|
Wikkelt de pass double in een Double object |
|
Retourneert het getal dat is verkregen uit de doorgegeven tekenreeks |
Interessant is dat er een isInfinite()
methode is die terugkeert true
als het doorgegeven getal positief of negatief oneindig is.
De isNaN()
methode is vergelijkbaar: er wordt gecontroleerd of het doorgegeven getal NaN
( Not-a-Number , een speciale constante die een ongedefinieerde waarde aangeeft) is.
3. Character
klasse
De Character
klasse is vooral interessant vanwege het grote aantal statische hulpprogramma's waarmee u kunt controleren of tekens tot verschillende categorieën behoren.
Voorbeelden
methoden | Beschrijving |
---|---|
|
Controleert of een teken een alfabetisch teken is |
|
Controleert of het teken een letter is |
|
Controleert of het teken een cijfer is |
|
Controleert of het teken een spatie, een regeleinde of een pagina-einde is (codes: 12, 13, 14) |
|
Controleert of het teken witruimte is: een spatie, tab, enz. |
|
Controleert of het teken een kleine letter is |
|
Controleert of het teken een hoofdletter is |
|
Converteert het teken naar kleine letters |
|
Converteert het teken naar hoofdletters |
Een kenmerk van deze methoden is dat ze werken met alle bekende alfabetten: Arabische cijfers worden geclassificeerd als cijfers, enz.
4. Boolean
klasse
Het Boolean
type is vrijwel hetzelfde als het boolean
type. De verschillen zijn minimaal.
Hieronder laten we een vereenvoudigde versie van de Boolean
klasse zien:
Code | Beschrijving |
---|---|
|
Constanten: TRUE è FALSE Variabele Boolean class constructor De methode retourneert de waarde van de interne variabele Deze statische methode converteert true naar TRUE en false naar FALSE . |
Het Boolean
type heeft twee constanten (twee velden):
Constanten van de klas | Tegenhanger van het booleaanse type | Beschrijving |
---|---|---|
|
|
WAAR |
|
|
vals |
U kunt ermee werken op dezelfde manier als met het boolean
type:
Code | Opmerking |
---|---|
|
De Boolean klasse is de enige klasse die binnen een voorwaarde kan worden geschreven |
|
Alle drie de variabelen zijn gelijk aan true /TRUE |
|
Constanten kunnen worden vergeleken met beide equals en == dit zal ook werken. |
Autoboxen werkt hier prima. Dat betekent dat je dit type op dezelfde manier kunt gebruiken als het boolean
type — er zijn geen valkuilen waar je op moet letten.
Hoe het is geschreven | Hoe het werkt |
---|---|
|
|
En hier een vergelijking van de boolean
en Boolean
types:
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)
Als u echt een onafhankelijk Boolean
object nodig heeft, moet u dit expliciet maken:
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)
Boolean
Nog een voorbeeld, waarbij we een binnenkant van een gebruiken if
:
Code | Opmerking |
---|---|
|
Dit zal compileren en werken |
Dit zal compileren, maar het zal niet werken!
Code | Opmerking |
---|---|
|
Fout . Deze regel genereert een uitzondering |
5. Waarden cachen tijdens autoboxen
Er zijn enkele valkuilen met betrekking tot integer-wrappertypen.
Zoals je al weet, als we an int
en an vergelijken Integer
, Integer
wordt de geconverteerd naar een int
:
Hoe het is geschreven | Hoe het werkt |
---|---|
|
|
Als je twee Integer
objecten met elkaar vergelijkt, worden ze niet omgezet naar int
s:
Code | Console-uitvoer |
---|---|
|
|
a == c
en , maar , omdat wanneer we vergelijken en we referenties vergelijken. Dat is in wezen wat we zouden verwachten.b == c
a != b
a
b
Verrassing
Maar als we vervangen 500
door 100
, dan krijgen we een heel ander resultaat:
Code | Console-uitvoer |
---|---|
|
|
Het probleem hier is dat er niet altijd een nieuw Integer
object wordt gemaakt tijdens het autoboxen . Objecten worden in de cache opgeslagen voor waarden -128
tot en met 127
inclusief.
De Integer
klasse heeft een verborgen array waarin objecten worden opgeslagen: Integer(-128)
, Integer(-127)
, ... Integer(126)
,Integer(127)
Als u schrijft Integer x = 128
, maakt het autoboxing-proces een nieuw object aan, maar als u schrijft Integer x = 127
, haalt het autoboxing-proces het bestaande object uit de cache (uit de array).
Als u niet wilt dat het Integer
object uit de cache komt, moet u het expliciet maken door te schrijven:Integer x = new Integer(127);
Alle wrappertypes hebben zo'n cache: Integer
, Long
, Byte
, Short
, Boolean
. Voor het Boolean
type zijn zijn TRUE
en FALSE
waarden beide constanten, dus ze worden ook in wezen in de cache opgeslagen.
GO TO FULL VERSION