1 klasaInteger
Integer
dobrze też, że jest klasą, co oznacza, że może mieć pola i metody. I oczywiście je ma. Nawet dużo - kilkadziesiąt. Dlatego rozważymy najbardziej podstawowe z nich.
Klasa Integer
ma dwa pola, które zawierają maksymalne i minimalne wartości typu int
:
Pole | Opis |
---|---|
|
Maksymalna wartość typuint |
|
Minimalna wartość typuint |
Czasami chcesz przypisać zmiennej najmniejszą lub największą wartość typu int
. Aby nie zaśmiecać kodu niezrozumiałymi stałymi, możesz pisać bardzo pięknie:
Kod | Opis |
---|---|
|
|
Klasa Integer
posiada również kilka ciekawych metod, oto one:
Metody | Opis |
---|---|
|
Zwraca ciąg — szesnastkową reprezentację liczby |
|
Zwraca ciąg — binarną reprezentację liczby |
|
Zwraca ciąg — ósemkową reprezentację liczby |
|
Zawija int przekazaneInteger |
|
Zwraca liczbę z ciągu znaków |
Spotkałeś się już z metodą statyczną Integer.parseInt()
. Przypomnij sobie, jak to działa:
int Nazwa = Integer.parseInt(строка);
Jeśli parseInt()
przekażesz do metody ciąg zawierający liczbę (tylko cyfry), przeanalizuje ona ciąg i zwróci zawartą w nim liczbę.
Przydatne są również inne metody. Na przykład niektóre z nich mogą zamienić podaną liczbę na ciąg znaków w postaci binarnej, ósemkowej lub szesnastkowej.
2. KlasaDouble
Klasa Double
ogólnie jest podobna do klasy Integer
, tyle że jest opakowaniem nie dla typu int
, ale dla typu double
. Ma również interesujące nas pola i metody, rozważmy niektóre z nich:
Klasa ma sześć interesujących pól Double
:
Pole | Opis |
---|---|
|
minus nieskończoność |
|
dodać nieskończoność |
|
Minimalna wartość wykładnika (2 x ) |
|
Maksymalna wartość wykładnika (2 x ) |
|
Minimalna wartość typudouble |
|
Maksymalna wartość typudouble |
Nieskończoność
Jeśli podzielisz -1.0
przez 0.0
, otrzymasz ujemną nieskończoność, jeśli 1.0
przez 0.0
, otrzymasz dodatnią nieskończoność. Typ double
może nie tylko dzielić przez zero, ale także przechowywać takie wartości.
Wykładnik liczbydouble
Również z wystawcą wszystko jest proste. Podwójna liczba wewnątrz składa się z mantysy i wykładnika. Tylko tutaj wartość wykładnika to nie , ale . Jeśli wykładnik wzrośnie o , całkowita wartość liczby zwiększy się dwukrotnie.10х
2х
1
MIN_EXPONENT == -1024
, kończymy z mniej więcej tym samym2-1024
10-308
Klasa Double
posiada również ciekawe metody:
Metody | Opis |
---|---|
|
Zwraca ciąg — szesnastkową reprezentację liczby |
|
Sprawdza, czy podana liczba jest nieskończonością. |
|
Sprawdza, czy podana liczba jestNaN |
|
Zawija double przekazaneDouble |
|
Zwraca liczbę z ciągu znaków |
Jedną z ciekawostek jest obecność metody isInfinite()
, która zwraca true
, jeśli przekazana do niej liczba to plus lub minus nieskończoność.
Metoda działa podobnie isNaN()
- sprawdza, czy przekazana do niej liczba jest NaN
: specjalną stałą oznaczającą niepewność ( Not a Number , Not a number ).
3. KlasaCharacter
Klasa Character
jest interesująca przede wszystkim ze względu na dużą liczbę użytkowych metod statycznych, które pozwalają sprawdzić znaki pod kątem przynależności do różnych kategorii.
Przykłady
Metody | Opis |
---|---|
|
Sprawdza, czy znak jest znakiem alfabetu |
|
Czy znak jest literą |
|
Czy znak jest liczbą |
|
Czy znakiem jest spacja, koniec wiersza lub zmiana akapitu (kody: 12, 13, 14) |
|
Czy znak jest separatorem: spacją, tabulatorem itp. |
|
Czy mała litera to mała litera? |
|
Wielka litera - wielkie litery? |
|
Konwertuje znak na małe litery |
|
Konwertuje znak na wielkie litery |
Cechą tych metod jest to, że działają one ze wszystkimi znanymi alfabetami: cyfry arabskie zostaną zdefiniowane jako liczby itp.
4 klasieBoolean
Typ Boolean
jest prawie taki sam jak boolean
. Różnice są minimalne.
Poniżej przedstawiamy uproszczoną wersję klasy Boolean
:
Kod | Opis |
---|---|
|
Stałe: TRUE i FALSE Wartość zmiennej Konstruktor klasy Boolean Metoda zwraca wartość wewnętrznej zmiennej wartości Ta statyczna metoda może konwertować true do TRUE i false na FALSE . |
Typ Boolean
ma dwie stałe (dwa pola):
Stałe klasowe | analog boolowski | Opis |
---|---|---|
|
|
PRAWDA |
|
|
kłamstwo |
Możesz z nimi pracować w taki sam sposób, jak z typem boolean
:
Kod | Notatka |
---|---|
|
Boolean - jedyna klasa, którą można zapisać wewnątrz warunku |
|
Wszystkie trzy zmienne są równe true /TRUE |
|
Stałe można porównywać zarówno na wskroś, equals jak i na wskroś == . To również zadziała. |
Autoboxing działa tutaj świetnie, więc możesz używać tego typu tak samo jak boolean
: bez pułapek.
Zgodnie z zapisem | Jak to działa |
---|---|
|
|
A oto jak porównania między typami boolean
i Boolean
:
boolean a = true;
Boolean b = true; // будет równa się Boolean.TRUE
Boolean c = true; // будет równa się Boolean.TRUE
a == b; // true (сравниваются Jak примитивы по значению)
a == c; // true (сравниваются Jak примитивы по значению)
b == c; // true (сравниваются по ссылке, но указывают на один и тот же obiekt)
Jeśli naprawdę potrzebujesz utworzyć niezależny obiekt Boolean
, musisz go utworzyć jawnie:
boolean a = true;
Boolean b = new Boolean(true); // новый obiekt Boolean
Boolean c = true; // будет równa się Boolean.TRUE
a == b; // true (сравниваются Jak примитивы по значению)
a == c; // true (сравниваются Jak примитивы по значению)
b == c; // false (сравниваются по ссылке, указывают на различные obiektы)
I jeszcze jeden przykład: użycie Boolean
wewnętrzne if
:
Kod | Notatka |
---|---|
|
Skompiluj i uruchom |
Skompiluje się, ale nie będzie działać:
Kod | Notatka |
---|---|
|
Błąd . Ta linia zgłasza wyjątek |
5. Buforowanie wartości za pomocą autoboxingu
Istnieją jednak pułapki związane z typami opakowań typu integer.
Jak już wiesz, jeśli porównasz int
i Integer
, Integer
zostanie on przekonwertowany na int
:
Zgodnie z zapisem | Jak to działa |
---|---|
|
|
Jeśli porównasz ze sobą dwa obiekty typu , nie zostaną one Integer
przekonwertowane na typ :int
Kod | Wyjście na wyświetlaczu |
---|---|
|
|
Chociaż , ale , ponieważ. podczas porównywania i porównywane są referencje. Co jest w zasadzie oczekiwane.a == c
b == c
a != b
a
b
Niespodzianka
Ale jeśli zastąpimy 500
przez 100
, otrzymamy zupełnie inny wynik:
Kod | Wyjście na wyświetlaczu |
---|---|
|
|
Chodzi o to, że autoboxing nie zawsze tworzy naprawdę nowy obiekt Integer
. Dla wartości od -128
do 127
włącznie obiekty są buforowane.
Klasa Integer
ma ukrytą tablicę, w której przechowywane są obiekty: Integer(-128)
, Integer(-127)
, ... Integer(126)
,Integer(127)
Jeśli napiszesz Integer x = 128
, autoboxing utworzy nowy obiekt, a jeśli napiszesz Integer x = 127
, autoboxing pobierze gotowy obiekt z pamięci podręcznej (z tablicy).
Jeśli nie chcesz, aby obiekt został Integer
pobrany z pamięci podręcznej, musisz go jawnie utworzyć, pisząc:Integer x = new Integer(127);
Wszystkie rodzaje opakowań mają taką pamięć podręczną: Integer
, Long
, Byte
, Short
, Boolean
. W przypadku typu obie Boolean
jego wartości są stałymi: w rzeczywistości są one również buforowane.TRUE
FALSE
GO TO FULL VERSION