1 klasaInteger
Integerdobrze 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 Integerma 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 Integerposiada 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 intprzekazaneInteger |
|
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 Doubleogó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.0przez 0.0, otrzymasz ujemną nieskończoność, jeśli 1.0przez 0.0, otrzymasz dodatnią nieskończoność. Typ doublemoż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-102410-308
Klasa Doubleposiada 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 doubleprzekazaneDouble |
|
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 Characterjest 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 Booleanjest prawie taki sam jak boolean. Różnice są minimalne.
Poniżej przedstawiamy uproszczoną wersję klasy Boolean:
| Kod | Opis |
|---|---|
|
Stałe: TRUEi FALSE Wartość zmiennej Konstruktor klasy Boolean Metoda zwraca wartość wewnętrznej zmiennej wartości Ta statyczna metoda może konwertować truedo TRUEi falsena FALSE. |
Typ Booleanma 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ś, equalsjak 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 booleani 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 Booleanwewnę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 inti Integer, Integerzostanie on przekonwertowany na int:
| Zgodnie z zapisem | Jak to działa |
|---|---|
|
|
Jeśli porównasz ze sobą dwa obiekty typu , nie zostaną one Integerprzekonwertowane 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 == cb == ca != bab
Niespodzianka
Ale jeśli zastąpimy 500przez 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 -128do 127włącznie obiekty są buforowane.
Klasa Integerma 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ł Integerpobrany 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 Booleanjego wartości są stałymi: w rzeczywistości są one również buforowane.TRUEFALSE
GO TO FULL VERSION