1. Integer
клас
Integer
също е добър с това, че е клас, което означава, че може да има полета и методи. И, разбира се, има ги. Много от тях - десетки от тях. Тук ще разгледаме най-основните.
Класът Integer
има две полета, които съдържат максималните и минималните възможни стойности на int
типа:
Поле | Описание |
---|---|
|
Максималната възможна стойност на int типа |
|
Минимална възможна стойност на int типа |
Понякога искате да присвоите възможно най-малката or най-голямата int
стойност на променлива. За да избегнете претрупването на codeа си с неразбираеми константи, можете да напишете това много ясно, Howто следва:
Код | Описание |
---|---|
|
|
Класът Integer
също има някои интересни методи. Ето ги и тях:
Методи | Описание |
---|---|
|
Връща низ, който е шестнадесетично представяне на числото |
|
Връща низ, който е двоичното представяне на числото |
|
Връща низ, който е осмично представяне на числото |
|
Обгръща предаденото int в Integer обект |
|
Връща числото, получено от предадения низ |
По-рано сте срещали статичния Integer.parseInt()
метод. Нека си припомним How работи:
int name = Integer.parseInt(string);
Ако към метода бъде подаден низ, съдържащ число (само цифри) parseInt()
, той ще анализира низа и ще върне числото, което съдържа.
Останалите методи също са полезни. Например, някои от тях могат да преобразуват предадено число в низ, съдържащ двоично, осмично or шестнадесетично представяне на числото.
2. Double
клас
Като цяло Double
класът е подобен на Integer
класа, само че обвива a, double
а не int
. Освен това има области и методи, които ще ни интересуват. Помислете за няколко от тях:
Класът Double
има шест интересни полета:
Поле | Описание |
---|---|
|
Отрицателна безкрайност |
|
Положителна безкрайност |
|
Минимален възможен показател (2 x ) |
|
Максимален възможен показател (2 x ) |
|
Минимална възможна стойност на double типа |
|
Максималната възможна стойност на double типа |
безкрайност
Ако разделите -1.0
на 0.0
, получавате отрицателна безкрайност. Ако разделите 1.0
на 0.0
, получавате положителна безкрайност. Не само можете да разделите a double
на нула, но можете също да го използвате за съхраняване на резултата от тези операции.
Показател на adouble
Разбирането на експонентата е лесно. Вътрешно двойното се състои от мантиса и експонента. Но тук стойността на степента не е , а . Така, ако експонентата се увеличи с , общата стойност на числото ще се удвои.10x
2x
1
MIN_EXPONENT == -1024
, което означава , което е приблизително равно на2-1024
10-308
И разбира се, Double
класът има интересни методи:
Методи | Описание |
---|---|
|
Връща низ, който е шестнадесетично представяне на числото |
|
Проверява дали предаденото число е безкрайност. |
|
Проверява дали предаденият номер еNaN |
|
Обгръща предаденото double в Double обект |
|
Връща числото, получено от предадения низ |
Интересното е, че има isInfinite()
метод, който връща true
, ако предаденото число е положителна or отрицателна безкрайност.
Методът isNaN()
е подобен — той проверява дали предаденото число е NaN
( Not-a-Number , специална константа, която показва недефинирана стойност).
3. Character
клас
Класът Character
е интересен преди всичко с големия си брой статични полезни методи, които ви позволяват да проверите дали героите принадлежат към различни категории.
Примери
Методи | Описание |
---|---|
|
Проверява дали знакът е азбучен знак |
|
Проверява дали символът е буква |
|
Проверява дали символът е цифра |
|
Проверява дали знакът е интервал, нов ред or нов ред на page (codeове: 12, 13, 14) |
|
Проверява дали символът е интервал: интервал, раздел и др. |
|
Проверява дали знакът е малък |
|
Проверява дали знакът е главна буква |
|
Преобразува знака в малки букви |
|
Преобразува знака в главни букви |
Характеристика на тези методи е, че те работят с всички известни азбуки: арабските цифри се класифицират като цифри и т.н.
4. Boolean
клас
Типът Boolean
е почти същият като boolean
типа. Разликите са минимални.
По-долу показваме опростена version на Boolean
класа:
Код | Описание |
---|---|
|
Константи: TRUE и Конструктор на клас FALSE променливи Методът връща стойността на вътрешната променлива. Този статичен метод преобразува в и в . Boolean true TRUE false FALSE |
Типът Boolean
има две константи (две полета):
Константи на класа | Съответствие за булевия тип | Описание |
---|---|---|
|
|
вярно |
|
|
невярно |
Можете да работите с тях по същия начин, Howто работите с boolean
типа:
Код | Забележка |
---|---|
|
Класът Boolean е единственият клас, който може да бъде написан в condition |
|
И трите променливи са равни на true /TRUE |
|
Константите могат да се сравняват с помощта на двете equals и == Това също ще работи. |
Autoboxing работи чудесно тук. Това означава, че можете да използвате този тип по същия начин като типа boolean
— няма клопки, за които да внимавате.
Как се пише | Как работи |
---|---|
|
|
И ето сравнение на видовете boolean
и Boolean
:
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)
Ако наистина имате нужда от независим Boolean
обект, тогава трябва да го създадете изрично:
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
вътрешност на if
:
Код | Забележка |
---|---|
|
Това ще се компorра и ще работи |
Това ще се компorра, но няма да работи!
Код | Забележка |
---|---|
|
Грешка . Този ред ще хвърли изключение |
5. Кеширане на стойности по време на autoboxing
Има някои клопки, свързани с типовете обвивки на цели числа.
Както вече знаете, ако сравним an int
и an Integer
, Integer
се преобразува в an int
:
Как се пише | Как работи |
---|---|
|
|
Ако сравните два Integer
обекта един с друг, те не се преобразуват в int
s:
Код | Конзолен изход |
---|---|
|
|
a == c
и , но , защото когато сравняваме и сравняваме препратки. Което по същество е това, което бихме очаквали.b == c
a != b
a
b
Изненада
Но ако заменим 500
с 100
, получаваме напълно различен резултат:
Код | Конзолен изход |
---|---|
|
|
Проблемът тук е, че нов Integer
обект не винаги се създава по време на автоматичното поставяне в кутия . Обектите се кешират за стойности -128
чрез 127
включително.
Класът Integer
има скрит масив, който съхранява обекти: Integer(-128)
, Integer(-127)
, ... Integer(126)
,Integer(127)
Ако напишете Integer x = 128
, тогава процесът на автоматично поставяне в кутия създава нов обект, но ако напишете Integer x = 127
, тогава процесът на автоматично поставяне в кутия извлича съществуващия обект от кеша (от масива).
Ако не искате Integer
обектът да идва от кеша, ще трябва да го създадете изрично, като напишете:Integer x = new Integer(127);
Всички типове обвивки имат такъв кеш: Integer
, Long
, Byte
, Short
, Boolean
. За Boolean
типа стойностите му TRUE
и FALSE
са константи, така че те също са по същество кеширани.
GO TO FULL VERSION