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
Integer.MAX_VALUE
Maksymalna wartość typuint
Integer.MIN_VALUE
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
int min = Integer.MIN_VALUE;
min будет равняться 0x80000000

Klasa Integerposiada również kilka ciekawych metod, oto one:

Metody Opis
String Integer.toHexString(int)
Zwraca ciąg — szesnastkową reprezentację liczby
String Integer.toBinaryString(int)
Zwraca ciąg — binarną reprezentację liczby
String Integer.toOctalString(int)
Zwraca ciąg — ósemkową reprezentację liczby
Integer Integer.valueOf(int i)
Zawija intprzekazaneInteger
Integer Integer.parseInt(String)
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
double Double.NEGATIVE_INFINITY
minus nieskończoność
double Double.POSITIVE_INFINITY
dodać nieskończoność
int Double.MIN_EXPONENT
Minimalna wartość wykładnika (2 x )
int Double.MAX_EXPONENT
Maksymalna wartość wykładnika (2 x )
double Double.MIN_VALUE
Minimalna wartość typudouble
double Double.MAX_VALUE
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
String Double.toHexString(double)
Zwraca ciąg — szesnastkową reprezentację liczby
boolean Double.isInfinite(double)
Sprawdza, czy podana liczba jest nieskończonością.
boolean Double.isNaN(double)
Sprawdza, czy podana liczba jestNaN
Double Double.valueOf(double)
Zawija doubleprzekazaneDouble
Double Double.parseDouble(String)
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
Character.isAlphabetic(int)
Sprawdza, czy znak jest znakiem alfabetu
Character.isLetter(char)
Czy znak jest literą
Character.isDigit(char)
Czy znak jest liczbą
Character.isSpaceChar(char)
Czy znakiem jest spacja, koniec wiersza lub zmiana akapitu (kody: 12, 13, 14)
Character.isWhitespace(char)
Czy znak jest separatorem: spacją, tabulatorem itp.
Character.isLowerCase(char)
Czy mała litera to mała litera?
Character.isUpperCase(char)
Wielka litera - wielkie litery?
Character.toLowerCase(char)
Konwertuje znak na małe litery
Character.toUpperCase(char)
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
class Boolean
{
   public static final Boolean TRUE = new Boolean(true);
   public static final Boolean FALSE = new Boolean(false);

   private final boolean value;

   public Boolean(boolean value)
   {
      this.value = value;
   }

   public boolean booleanValue()
   {
      return value;
   }

   public static Boolean valueOf(boolean value)
   {
      return (value ? TRUE : FALSE);
   }
}


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
Boolean.TRUE
true
PRAWDA
Boolean.FALSE
false
kłamstwo

Możesz z nimi pracować w taki sam sposób, jak z typem boolean:

Kod Notatka
if (Boolean.TRUE)
{
}
Boolean- jedyna klasa, którą można zapisać wewnątrz warunku
Boolean a = Boolean.TRUE;
boolean b = Boolean.TRUE;
boolean с = true;
Wszystkie trzy zmienne są równe true/TRUE
Boolean a = Boolean.TRUE;
Boolean b = Boolean.TRUE;
if (a == b)
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
Boolean a = true;
Boolean b = true;
Boolean c = false;
boolean d = a;
Boolean a = Boolean.valueOf(true);
Boolean b = Boolean.valueOf(true);
Boolean c = Boolean.valueOf(false);
boolean d = a.booleanValue();

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
Boolean less = (2 < 3);
if (less)
{
   ...
}
Skompiluj i uruchom

Skompiluje się, ale nie będzie działać:

Kod Notatka
Boolean less = null;
if (less)
{
   ...
}

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
int a = 5;
Integer b = 5;
if (a == b)
{
   ...
}
int a = 5;
Integer b = Integer.valueOf(5);
if (a == b.intValue())
{
   ...
}

Jeśli porównasz ze sobą dwa obiekty typu , nie zostaną one Integerprzekonwertowane na typ :int

Kod Wyjście na wyświetlaczu
Integer a = 500;
Integer b = 500;
int c = 500;

System.out.println(a == b); // сравнение ссылок
System.out.println(a == c);
System.out.println(b == c);




false
true
true

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
Integer a = 100;
Integer b = 100;
int c = 100;

System.out.println(a == b); // сравнение ссылок
System.out.println(a == c);
System.out.println(b == c);




true
true
true

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