1. Списък на примитивните типове
Java има 8 основни примитивни типа. Те се наричат примитивни, защото стойностите на тези типове не са обекти и се съхраняват директно в променливите.
Ето table с кратка информация за тези видове:
Тип | Размер в byteове |
Диапазон на стойността | Стойност по подразбиране | Описание |
---|---|---|---|---|
byte |
1 | -128 .. 127 | 0 |
Най-малкият тип цяло число е един byte |
short |
2 | -32 768 .. 32 767 | 0 |
Кратко цяло число, два byteа |
int |
4 | -2*10 9 .. 2*10 9 | 0 |
Цяло число, 4 byteа |
long |
8 | -9*10 18 .. 9*10 18 | 0L |
Дълго цяло число, 8 byteа |
float |
4 | -10 38 .. 10 38 | 0.0f |
Число с плаваща запетая, 4 byteа |
double |
8 | -10 308 .. 10 308 | 0.0d |
Число с плаваща запетая с двойна точност, 8 byteа |
boolean |
1 | true ,false |
false |
Булев тип (само true и false ) |
char |
2 | 0 .. 65,535 | '\u0000' |
Знаци, 2 byteа, всички по-големи от 0 |
Между другото, тук има един важен нюанс. Ако декларирате променлива на екземпляр (поле) or променлива на статичен клас и не й присвоите веднага ниHowва стойност, тогава тя се инициализира със стойност по подразбиране . Таблицата представя списък на тези стойности.
Локалните променливи в метода нямат стойност по подразбиране. Ако не присвоите стойност на такива променливи, те се считат за неинициализирани и не могат да бъдат използвани.
Но нека се върнем към примитивните типове и да ги разгледаме по-отблизо.
2. Целочислени типове
Java има 4 типа цели числа: byte
, short
и int
. long
Те се различават по своя размер и диапазона от стойности, които могат да съхраняват.
int
Тип
Най-често използваният е int
типът. Името идва от думата int eger (цяло число). Всички цели числа (цели числа) в codeа са ints
(ако не завършват на L
, F
, or D
).
Променливите от този тип могат да приемат стойности от -2,147,483,648
до +2,147,483,647
.
Това е много и е достатъчно за почти всеки повод. Почти всяка функция, която връща число, връща int
.
Примери:
Код | Обяснение |
---|---|
|
Методът length() връща дължината на низ |
|
Полето length съдържа дължината на масива. |
short
Тип
Типът short
получава името си от short int
. Често се нарича и кратко цяло число . За разлика от int
типа, неговата дължина е само два byteа и обхватът на възможните стойности е от -32,768
до +32,767
.
Това означава, че не можете да съхранявате числото един мorон в него. Или дори 50 000. Това е най-рядко използваният целочислен тип в Java. Основната мотивация за използването му е запазването на паметта.
Да предположим, че имате ситуация, в която знаете предварително, че ще работите със стойности, които никога не надвишават 30 000, и ще има мorони от тези стойности.
Например, да кажем, че пишете приложение, което обработва картини с ултрависока разделителна способност, които използват 10
-бита за цвят. И имате мorон пиксела във вашата снимка. Това е сценарий, при който решението за използване int
or short
има meaning.
long
Тип
Този тип получава името си от long int
и се нарича още дълго цяло число . За разлика от int
типа, той има страхотно огромен диапазон от стойности: от до .-9*1018
+9*1018
Защо не е основният целочислен тип?
Защото Java се появи в средата на 90-те, когато повечето компютри бяха 32-битови. Това означава, че всички процесори са оптимизирани за работа с числа, състоящи се от 32 бита. Процесорите можеха да работят с 64-битови цели числа, но операциите с тях бяха по-бавни.
В резултат на това програмистите разумно решиха да направят int
стандартния целочислен тип и да използват long
типа само когато наистина е необходимо.
byte
Тип
Това е най-малкият целочислен тип в Java, но далеч не е най-рядко използваният. Името му, byte
, е и думата за най-малкия addressируем блок памет в Java.
Няма толкова много валидни стойности за byte
типа: от -128
до +127
. Но това не е силата му. Типът byte
се използва най-често, когато трябва да съхраните големи данни в паметта. Масив от byte
s е идеален за тази цел.
Да предположим, че трябва да копирате файл някъде.
Не е необходимо да обработвате съдържанието на file: просто искате да създадете област от паметта (буфер), да копирате съдържанието на file в нея и след това да запишете тези данни от буфера в друг файл. Масивът byte
е това, от което се нуждаете за това.
Имайте предвид, че променливата на масива съхранява само препратка към област от паметта. Когато променливата се предава на няHowъв метод, се предава само addressът на паметта. Самият блок памет не се копира.
byte[] buffer = new byte[1024*1024];
FileInputStream sourceFile = new FileInputStream("c:\\data.txt");
FileOutputStream destFile = new FileOutputStream("c:\\output.txt");
while (true)
{
int size = sourceFile.read(buffer); // Read data from a file into a buffer
destFile.write(buffer, 0, size); // Write data from the buffer to a file
// Stop copying if the buffer is not full
if (size < buffer.length) break;
}
sourceFile.close();
destFile.close();
3. Реални типове
Примитивните типове включват два типа за реални числа. Въпреки че не е съвсем точно да се използва този термин. Когато компютрите обработват реални числа, ние ги наричаме числа с плаваща запетая . Името идва от стандарт за представяне на числа, при който целите и дробните части на числото са разделени с точка (точка, а не запетая).
Всяка държава има свои собствени стандарти за писане на числа (изненада!).
Много хора са свикнали да използват точки за разделяне на хилядите и запетаи като десетичен разделител: например биха написали one million ones and 153 thousandths
като 1.000.000,153
. Но в Съединените щати, където са живели създателите на Java, е приет различен стандарт:1000000.153
Java има два примитивни типа с плаваща запетая: double
и float
.
Както казахме по-рано, тези типове имат много специфична вътрешна подредба: всъщност във всяка променлива от тези типове има не едно число, а две:
Например, числото с плаваща запетая 987654.321
може да бъде представено като . Тогава в паметта то ще бъде представено като две числа ( мантиса , т.е. значимата част от числото) и ( експонента , т.е. степен на десет)0.987654321*106
987654321
6
float
Тип
Името на float
типа идва от число с плаваща запетая . Размерът на този тип е доста малък — само 4 byteа (32 бита) — но може да съхранява стойности от до . 24 бита са разпределени за представяне на мантисата и 8 бита за степента. Този тип може да съхранява само 8 значещи цифри.-3.4*1038
3.4*1038
Този подход позволява да се съхраняват много по-големи числа от int
, като се използват същите 4 byteа. Но за да го направим, ние жертваме точността. Тъй като част от паметта съхранява мантисата, тези променливи съхраняват само 6-7 знака след десетичната запетая, докато останалите се изхвърлят.
Пример:
Код | Стойност |
---|---|
|
123.45679 |
|
12346.0 |
|
-1.2345679 |
Както можете да видите, основният недостатък на този тип е много малкият брой значими цифри и загубата на точност още при осмата цифра. Ето защо float
типът не е много популярен сред Java програмистите.
double
Тип
Типът double
е стандартният тип с плаваща запетая. Името идва от число с плаваща запетая с двойна точност . Всички реални литерали са double
s по подразбиране.
Този тип заема 8 byteа памет (64 бита) и може да съхранява стойности от до . Важно е да знаете, че 53 бита са заделени за мантисата, а останалите 11 са за експонентата.-1.7*10308
1.7*10308
Това позволява да се съхраняват 15-17 значещи цифри.
Пример:
Код | Стойност |
---|---|
|
1234567890.1234567 |
|
1234567890.1234512 |
|
1234567890.1357913 |
Тази прецизност, особено в сравнение с float
типа, е решаваща: 99% от всички операции с реални числа се извършват с помощта на double
типа.
11
битове се разпределят за експонента, което означава, че можете да съхранявате степени на десет от -323
до +308
(това е степен на две от -1024
до +1023
). Типът double
може лесно да съхранява число със стотици нули след десетичната запетая:
Код | Стойност |
---|---|
|
600.0 |
4. Безкрайност
Числата с плаваща запетая имат друга интересна характеристика: те могат да съхраняват специална стойност, обозначаваща безкрайност . И можете да представите положителна безкрайност и отрицателна безкрайност .
Примери:
Код | Забележка |
---|---|
|
|
|
|
|
|
Ако безкрайността се умножи по число, получавате безкрайност. Ако добавите число към безкрайността, ще получите безкрайност. Това е супер удобно.
Не е число ( NaN
)
Всички операции, включващи безкрайност, дават безкрайност. Е, повечето, но не всички.
Числата с плаваща запетая могат да съхраняват друга специална стойност: NaN
. Това е съкращение от N не N номер (не число).
В математиката, ако разделите безкрайност на безкрайност, резултатът е недефиниран.
Но в Java, ако разделите безкрайност на безкрайност, резултатът е NaN
.
Примери:
Код | Забележка |
---|---|
|
|
|
|
|
|
Всяка операция с NaN
добиви NaN
.
5. char
вид
Сред примитивните типове на Java един заслужава специално внимание: типът char
. Името му идва от думата char acter , а самият тип се използва за съхраняване на знаци.
Знаците са това, от което са напequalsи низовете, нали? Низовете са масив от знаци.
Но още по-интересен е фактът, че char
типът също е числов тип ! Това е тип с двойно преднаmeaning, така да се каже.
Реалността е, че char
типът всъщност не съдържа знаци. Вместо това, той съхранява codeове на знаци от Unicode codeирането. Всеки знак съответства на число: цифровият code на знака.
Всяка char
променлива заема два byteа в паметта (същото като short
типа). Но за разлика от short
типа, char
целочисленият тип е без знак и може да съхранява стойности от 0
до 65,535
.
Типът char
е хибриден тип. Стойностите му могат да се интерпретират Howто като числа (напр. могат да се събират и умножават), така и като знаци. Това беше напequalsо, защото въпреки че знаците са визуални представяния, за компютър те са преди всичко само числа. И е много по-удобно да работите с тях като числа.
Unicode
Unicode е специална table (codeиране), която съдържа всички знаци в света. И всеки знак има свой номер. Изглежда приблизително така:
Има различни начини за присвояване на стойност на char
променлива.
Код | Описание |
---|---|
|
Променливата a ще съдържа латинската буква A . |
|
Променливата a ще съдържа латинската буква A . Кодът му е 65 . |
|
Променливата a ще съдържа латинската буква A . Кодът му е 65 , което е равно 41 в шестнадесетичната система. |
|
Променливата a ще съдържа латинската буква A . Кодът му е 65 , което е равно 41 в шестнадесетичната система. Двете допълнителни нули не променят нищо. |
|
Променливата a ще съдържа латинската буква A . Друг начин за дефиниране на символ чрез неговия code. |
Най-често хората просто посочват знака в кавички (Howто в първия ред на tableта). Въпреки това, последният метод също е популярен. Предимството му е, че може да се използва в низове.
И Howто казахме, char
типът също е целочислен тип, така че можете да напишете нещо подобно:
Код | Конзолен изход |
---|---|
|
B На екрана ще се покаже латинската буква . Защото: A – 65 B – 66 C –67 |
Работа с char
s
Всеки char
е първо число (code на символа), а след това символ. Ако знаете code на знак, винаги можете да получите знака във вашата програма. Пример:
Код | Конзолен изход |
---|---|
|
|
Стандартни codeове
Ето най-известните codeове на символи:
герои | Кодове |
---|---|
0 , 1 , 2 , ...9 |
48 , 49 , 50 , ...57 |
a , b , c , ...z |
97 , 98 , 99 , ...122 |
A , B , C , ...Z |
65 , 66 , 67 , ...90 |
6. boolean
вид
И последният примитивен тип е boolean
.
Както вече знаете, той може да приема само две стойности: true
и false
.
И с това вече знаете всичко, което трябва да знаете за този тип.
GO TO FULL VERSION