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
Разбирането на експонентата е лесно. Вътрешно двойното се състои от мантиса и експонента. Но тук стойността на степента не е , а . Така, ако експонентата се увеличи с , общата стойност на числото ще се удвои.10x2x1
MIN_EXPONENT == -1024, което означава , което е приблизително равно на2-102410-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 променливи Методът връща стойността на вътрешната променлива. Този статичен метод преобразува в и в . BooleantrueTRUEfalseFALSE |
Типът 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обекта един с друг, те не се преобразуват в ints:
| Код | Конзолен изход |
|---|---|
|
|
a == cи , но , защото когато сравняваме и сравняваме препратки. Което по същество е това, което бихме очаквали.b == ca != bab
Изненада
Но ако заменим 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