CodeGym /Kurslar /Java SELF AZ /Java-dakı primitiv tiplər

Java-dakı primitiv tiplər

Java SELF AZ
Səviyyə , Dərs
Mövcuddur

1. Primtiv tiplərin siyahısı

Java-da 8 əsas primtiv tip var. Bunlara primtiv deyirlər, çünki bu tiplərin dəyərləri obyekt deyillər və birbaşa dəyişənlərdə saxlanılır.

Bu tiplər barədə qısa informasiya verən cədvəl aşağıdadır:

Tip Ölçü,
bayt
Dəyərlər aralığı Susmaya görə dəyər Təsviri
byte 1 -128 .. 127 0 Ən kiçik tam ədəd — bir bayt
short 2 -32,768 .. 32,767 0 Qısa tam ədəd, iki bayt
int 4 -2*109 .. 2*109 0 Tam ədəd, 4 bayt
long 8 -9*1018 .. 9*1018 0L Uzun tam ədəd, 8 bayt
float 4 -1038 .. 1038 0.0f Ondalık, 4 bayt
double 8 -10308 .. 10308 0.0d Ondalık, ikiqat uzun, 8 bayt
boolean 1 true, false false Məntiqi tip (yalnız true & false)
char 2 0 .. 65,535 '\u0000' Simvollar, 2 bayt, hər şey 0-dan böyük
Susmaya görə dəyər

Bu arada, vacib detal. Əgər sinif dəyişəni (sinif sahəsi) və ya statik sinif dəyişəni elan etdinizsə və ona heç bir dəyər təyin etmədinizsə, o, susmaya görə dəyər ilə inizializasiya olunur. Belə dəyərlərin siyahısı cədvəldə verilib.

Metodların lokal dəyişənləri susmaya görə dəyərə sahib deyil, və əgər belə bir dəyişənə heç bir dəyər təyin etməsəniz, o, inicializasiya edilməmiş hesab olunur və dəyərindən istifadə etmək olmaz.

Amma gəlin yenidən primtiv tiplərə qayıdaq və bunları daha ətraflı nəzərdən keçirək



2. Tam tiplər

Java dilində düz 4 tam tip var: byte, short, intlong. Onlar ölçüləri və saxlaya biləcəkləri dəyərlərin diapazonu ilə fərqlənirlər.

int tipi

Ən çox istifadə olunan tip int tipidir. Onun adı Integer (tam) sözündən gəlir. Koddakı bütün tam ədədi ədədli dəyərlər int tipində olurlar (əgər ədədin sonunda L, F və ya D hərfləri göstərilməyibsə).

Bu tipdə dəyişənlərin dəyəri -2,147,483,648-dən +2,147,483,647-ə qədər qəbul edə bilər.

Bu kifayət qədər böyükdür və demək olar ki, bütün hallarda kifayət edir. Demək olar ki, bütün funksiyalar hansı ki, ədəd qaytarır, int tipində ədəd qaytarırlar.

Nümunələr:

Kod İzah
int n = "Sətir".length();
length() metodu sətirin uzunluğunu qaytarır
String[] array = {"Tic", "Tac", "Toe"};
int n = array.length;
length sahəsi massiv uzunluğunu özündə saxlayır.

short tipi

short tipi öz adını short int sözündən alıb. Ona hələ də qısa tam deyilir. int tipindən fərqli olaraq, onun uzunluğu cəmi iki baytdır və mümkün dəyərlərin diapazonu -32,768-dən +32,767-ə qədərdir.

Yəni hətta bu tipdə milyon saxlamaq mümkün deyil. Hətta 50 min də. Bu, Java-dakı ən az istifadə olunan tam ədədi tipdir. Əsasən bu tip, yaddaşdan qənaət etmək istəyəndə istifadə olunur.

Məsələn, sizdə elə bir vəziyyət ola bilər ki, işlədiyiniz dəyərlərin 30 min keçməyəcəyi əvvəlcədən məlumdur və belə dəyərlər milyonlarla vardır.

Məsələn, siz ultra-yüksək dəqiqlikli şəkilləri işləyən bir proqram yazırsınız: bir rəngə 10 bit düşür. Amma şəkildə bir milyona yaxın piksel var. Burada artıq fərq edir, siz int tipindən istifadə edirsiniz, yoxsa short tipindən.

long tipi

Bu tip öz adını long int-dən götürüb — ona hələ də uzun tam deyilir. int tipindən fərqli olaraq, onun sadəcə nəhəng dəyərlər diapazonu vardır: -9*1018-dən +9*1018-ə qədərdir.

Bəs niyə bu əsas tam tip deyil?

Hamısı Java-nın 90-cı illərin ortalarında yarandığı ilə əlaqədardır, həmin dövrdə əksər kompüterlər 32-bitlik idi. Bu da proseslərin əsasən 32-bitlik ədədlərlə işləmək üçün uyğunlaşdığı mənasına gəlirdi. 64-bitlik tam ədədlərlə işləmək prosessorlar üçün mümkün idi, amma belə ədədlərlə əməliyyatlar daha ləng olurdu.

Buna görə də proqramçılar ağıllı qərar verdilər və standart tam ədədi tip kimi int tipini seçdilər, amma long tipini yalnız onsuz keçinmək çətin olduğu hallarda istifadə etdilər.

byte tipi

Bu, Java-da ən kiçik tam ədədi tipdir, lakin heç də ən az istifadə olunan deyil. Onun adı byte sözü ilə üst-üstə düşür — Java-da minimal müraciət edilə bilən yaddaş hüceyrəsi.

byte tipinin mümkün dəyərləri çox böyük deyil: -128-dən +127-ə qədərdir. Amma bu, onun üstünlüyü deyil. byte tipi əsasən yaddaşda böyük anonim məlumat bloklarını saxlamaq lazım olduqda istifadə olunur. byte tipli massiv bu məqsədlər üçün sadəcə mükəmməldir.

Məsələn, siz hansısa bir faylı harasa köçürməlisiniz.

Faylın məzmununu emal etməyə ehtiyacınız yoxdur: sadəcə yaddaş bölgəsi (buffer) yaratmaq istəyirsiniz, faylın məzmununu oraya köçürmək və sonra bu məlumatları başqa fayla yazmaq. Bu məqsəd üçün byte tipli massiv tam yararlıdır.

Üstəlik, massiv tipində dəyişəndə yalnız yaddaş sahəsinə keçid saxlanır. Bu dəyəri hər hansı bir metoda verdikdə yalnız yaddaşda olan ünvan ötürüləcək, yaddaş sahəsinin özü isə kopyalanmayacaq.

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);   // fayldan məlumatları buferə oxuyuruq
   destFile.write(buffer, 0, size);      // buferdən fayla məlumatları yazırıq

   // əgər bufer tam dolmayıbsa, köçürmə dayandırılır
   if (size < buffer.length) break;
}
sourceFile.close();
destFile.close();


3. Onluq vergüllü tiplər

Sadə tiplərin arasında həmçinin iki onluq vergüllü tip var. Amma bu tam dəqiq ad deyil. Rəsmi olaraq onlar üzən nöqtəli ədədlərfloating point numbers adlanır. Adı standartdan gəlir: burada tam və kəsr hissələri nöqtə (vergül deyil) ayırır.

Faydalıdır:

Hər ölkədə ədədlərin yazılması üçün öz standartları var (təəccüb!).

Çoxumuz minlikləri nöqtə ilə, kəsr hissələrini isə vergül ilə bölməyə vərdiş etmişik: məsələn, bir milyon tam və 153 mində belə yazarıq: 1.000.000,153. Amma ABŞ-da, harada ki Java yaradılıb, fərqli standart istifadə olunur: 1,000,000.153

Java-da iki üzən nöqtəli sadə tip var: doublefloat.

Əvvəllər dediyimiz kimi, bu tiplər içində xüsusi bir şəkildə təşkil olunmuşdur: əslində bu tiplərə aid olan hər bir dəyişəndə bir rəqəm yox, iki rəqəm saxlanılır:

Məsələn, 987654.321 kəsr ədədini belə təsvir etmək olar: 0.987654321*106. Buna görə yaddaşda bu, iki ədəd kimi saxlanılır: 987654321 (mantissa — ədədin əsas hissəsi) və 6 (eksponent — onluq qüvvət).

float tipi

float tipinin adı floating point number ifadəsindən gəlir. Bu tipin ölçüsü kiçikdir — cəmi 4 bayt (32 bit), baxmayaraq ki, dəyəri -3.4*1038-dən 3.4*1038-ə qədər saxlayır. Mantissaya 24 bit, eksponentaya isə 8 bit ayrılır. Bu tip cəmi 8 mənalı rəqəm saxlaya bilir.

Bu yanaşma ədədin ölçüsünü artırmağa imkan verir, məsələn, int ilə müqayisədə daha böyük rəqəmlər saxlayır, amma dəqiqlikdən imtina edirik. Mantissanın saxlanması üçün yaddaşın bir hissəsi götürülür, buna görə belə ədədlər cəmi 6-7 rəqəmi saxlayır, digər rəqəmlər isə atılır.

Nümunə:

Kod Dəyişənin dəyəri
float a = (float) 123.456789;
123.45679
float a = (float) 12345.9999;
12346.0
float a = (float) -123.456789E-2;
-1.2345679

Gördüyünüz kimi, bu tipin əsas çatışmazlığı — çox az mənalı rəqəm saxlamaq qabiliyyəti və səkkizinci rəqəmdən sonra dəqiqliyin itirilməsidir. Buna görə float tipi Java proqramçılar arasında çox da populyar deyil.

double tipi

double tipi üzən nöqtə ilə standart tipdir. Adı double floating point ifadəsindən gəlir. Bəzən ona ikisəviyyəli dəqiqliklə üzən nöqtəli ədəd deyirlər. Bütün onluq ədəd literalları avtomatik olaraq double tipinə aid olur.

Bu tip 8 bayt yaddaş (64 bit) tutur və -1.7*10308-dən 1.7*10308-ə qədər dəyər saxlayır. Əsas məqam ondadır ki, bu tipin mantissasına 53 bit, qalan 11 bit isə eksponentaya ayrılır.

Bu, 15-17 mənalı rəqəm saxlamağa imkan verir.

Nümunə:

Kod Dəyişənin dəyəri
double a = 1234567890.1234567890;
1234567890.1234567
double a = 1234567890.1234512345;
1234567890.1234512
double a = 1234567890.1357913579;
1234567890.1357913

Bu dəqiqlik, xüsusilə float ilə müqayisədə, əsasdır: üzən nöqtəli ədədlər ilə əməliyyatların 99%-i double tipi ilə həyata keçirilir.

Eksponent üçün 11 bit ayrılır ki, bu da onluq qüvvətləri -323-dən +308-ə qədər saxlamağa imkan verir (ikilik qüvvətləri isə -1024-dən +1023-ə qədər). double tipi asanlıqla yüz sıfırdan sonra nöqtəli ədəd saxlaya bilir:

Kod Dəyişənin dəyəri
double a = 2E-300 * 3E+302
600.0


4. Sonsuzluq

Floating-point (üzən vergül) ədədləri daha bir maraqlı xassəyə malikdir: onlar xüsusi bir dəyəri - sonsuzluğu saxlamağa imkan verir. Həm də müsbət sonsuzluqmənfi sonsuzluq ola bilər.

Nümunələr:

Kod Qeyd
System.out.println( 100.0 / 0.0 );
Infinity
System.out.println( -100.0 / 0.0 );
-Infinity
double a = 1d / 0d;
double b = a * 10;
double c = b - 100;
a == Infinity
b == Infinity
c == Infinity

Əgər sonsuzluğu bir ədədə vurursansa, nəticə yenə sonsuzluq olacaq. Əgər sonsuzluğa bir ədəd əlavə edirsənsə, nəticə yenə də sonsuzluq olacaq. Çox rahatdır.

Sayı deyil (NaN)

Sonsuzluqla bağlı əməliyyatların hamısı sonsuzluq verir. Ümumiyyətlə, doğrudur, amma hamısı yox.

Floating-point ədədləri daha bir xüsusi dəyəri saxlayır — NaN. Bu, Not a Number (sayı deyil) ifadəsindən götürülüb.

Riyaziyyatda, əgər sonsuzluğu sonsuzluğa bölsək, qeyri-müəyyənlik yaranmalıdır.

Amma Java-da əgər sonsuzluğu sonsuzluğa bölsək, nəticə NaN olacaq.

Nümunələr:

Kod Qeyd
System.out.println(0.0 / 0.0);
NaN
double infinity = 1d / 0d;
System.out.println(infinity / infinity);

NaN
double a = 0.0 / 0.0;
double b = a * 10;
double c = b - 100;
double d = a + infinity;
a == NaN
b == NaN
c == NaN
d == NaN

NaN ilə aparılan istənilən əməliyyat NaN verir.



5. char tipi

Java-da primitiv tiplər arasında daha bir tip var ki xüsusi diqqətə layiqdir — bu char tipidir. Adı Character sözündən irəli gəlir və bu tip simvolları saxlamaq üçün istifadə olunur.

Simvollar isə məhz sətirləri təşkil edən elementlərdir: hər bir sətir simvollar massivindən ibarətdir.

Amma daha maraqlısı budur ki, char tipi həm də rəqəm tipidir! Başqa sözlə, bu tip iki məqsədlidir.

Əslində isə char tipi simvolları deyil, Unicode kodlaşdırmasından olan simvol kodlarını saxlayır. Hər bir simvolla müəyyən bir rəqəm — simvolun rəqəm kodu uyğun gəlir.

char tipində olan hər dəyişən yaddaşda iki bayt yer tutur (elə short kimi). Amma fərqli olaraq short tipindən, tam ədəd tipi olan char işarəsizdir və 0-dan 65,535-ə qədər olan dəyərləri saxlaya bilər.

char tipi — hibrid bir tipdir. Onun dəyərləri həm ədəd (toplama və vurma əməliyyatlarını yerinə yetirmək olar), həm də simvol kimi şərh edilə bilər. Belə edilməsinin səbəbi odur ki, simvollar vizual təqdimata malik olsa da, kompüter üçün onlar ilk növbədə sadəcə rəqəmlərdir. Və onlarla rəqəm kimi işləmək çox daha rahatdır.

Unicode

Unicode — bu, dünya üzrə bütün simvolları əhatə edən xüsusi bir cədvəl (kodlaşdırma)dir. Və hər bir simvolun öz nömrəsi var. Təxminən belə görünür:

Java-da primitiv tiplər

char tipli dəyişənə müxtəlif yollarla dəyər mənimsətmək olar.

Kod İzah
char a = 'A';
a dəyişəni latın hərfi A saxlayacaq.
char a = 65;
a dəyişəni latın hərfi A saxlayacaq. Onun kodu məhz 65-dir.
char a = 0x41;
a dəyişəni latın hərfi A saxlayacaq.
Onun kodu məhz 65-dir ki, bu da onaltılıq sistemdə 41-ə bərabərdir.
char a = 0x0041;
a dəyişəni latın hərfi A saxlayacaq.
Onun kodu məhz 65-dir ki, bu da onaltılıq sistemdə 41-ə bərabərdir.
İki əlavə sıfır heç nəyi dəyişmir.
char a = '\u0041';
a dəyişəni latın hərfi A saxlayacaq.
Koduna görə simvolu təyin etmənin başqa bir yolu.

Ən çox sadəcə simvolu dırnaq içində göstərirlər (cədvəlin birinci sətrində olduğu kimi). Amma sonuncu üsul da populyardır. Bu üsulun üstünlüyü odur ki, onu sətirlərdə də istifadə etmək olar.

Dediyimiz kimi, char tipi həm də tam ədəd tipi olduğu üçün bu cür də yazmaq olar:

Kod Ekran çıxışı
char a = 'A';
a++;
System.out.println(a);
Ekranda latın hərfi B göstəriləcək.
Çünki:
A65
B66
C67

char tipi ilə iş

Hər char simvolu əslində ilk növbədə rəqəmdir (simvolun kodu), daha sonra isə simvoldur. Simvolun kodunu bildikdə, onu proqramda əldə etmək həmişə mümkündür. Misal:

Kod Ekran çıxışı
char c = (char) 1128;
System.out.println(c);

Ѩ

Standart kodlar

Ən tanınmış simvol kodları bunlardır:

Simvollar Kodlar
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 tipi

Və nəhayət, sonuncu primitiv tip — boolean tipidir.

Artıq bildiyiniz kimi, bu, sadəcə iki dəyər ala bilər: truefalse.

Əslində, bu tip barədə artıq biləcəyiniz hər şeyi bilirsiniz.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION