JavaRush /Kurslar /All lectures for UZ purposes /Java-dagi primitiv turlar

Java-dagi primitiv turlar

All lectures for UZ purposes
Daraja, Dars
Mavjud

1. Primitiv turlar ro'yxati

Java-da 8 ta asosiy primitiv tur mavjud. Ularga primitiv deyiladi, chunki bu turlarning qiymatlari obyektlar emas va bevosita o'zgaruvchilarning ichida saqlanadi.

Mana shu turlar haqida qisqacha ma'lumot beruvchi jadval:

Tur O'lcham,
bayt
Qiymat diapazoni Standart qiymat Tavsif
byte 1 -128 .. 127 0 Eng kichik butun — bir bayt
short 2 -32,768 .. 32,767 0 Qisqa butun, ikki bayt
int 4 -2*109 .. 2*109 0 Butun son, 4 bayt
long 8 -9*1018 .. 9*1018 0L Uzun butun, 8 bayt
float 4 -1038 .. 1038 0.0f Qisman, 4 bayt
double 8 -10308 .. 10308 0.0d Qisman, ikki marta uzun, 8 bayt
boolean 1 true, false false Mantiqiy tur (faqat true & false)
char 2 0 .. 65,535 '\u0000' Belgilar, 2 bayt, hammasi 0 dan katta
Standart qiymat

Aytgancha, muhim narsa. Agar siz biror o'zgaruvchini (sinf maydoni) yoki statik o'zgaruvchini e'lon qilgan bo'lsangiz va unga hech qanday qiymat bermagan bo'lsangiz, u standart qiymat bilan initsializatsiya qilinadi. Bunday qiymatlar ro'yxati jadvalda keltirilgan.

Metodlarning lokal o'zgaruvchilari standart qiymatga ega emas, agar siz bunday o'zgaruvchiga qiymat bermagan bo'lsangiz, u initsializatsiya qilinmagan hisoblanadi va siz unga qiymat bermasdan foydalana olmaysiz.

Lekin keling, primitiv turlarga qaytaylik va ularni batafsilroq o'rganaylik



2. Butun turlar

Java tilida 4 ta butun tur bor: byte, short, int va long. Ular hajmi va saqlay oladigan qiymat diapazoni bilan farqlanadi.

Tur int

Eng ko'p ishlatiladigan turi int. Uning nomi Integer (butun) so'zidan kelib chiqqan. Koddagi barcha butun sonli literalni tipi int (agar sonning oxirida L, F yoki D harfi belgilanmagan bo'lsa).

Ushbu turdagi o'zgaruvchilar -2,147,483,648 dan +2,147,483,647 gacha qiymat qabul qilishi mumkin.

Bu juda katta va deyarli barcha hollarda yetarli. Deyarli barcha funksiyalar, son qaytarayotganlar, int turidan son qaytaradi.

Misollar:

Kod Tushuntirish
int n = "Строка".length();
Metod length() satrning uzunligini qaytaradi
String[] array = {"Tic", "Tac", "Toe"};
int n = array.length;
Maydon length massivning uzunligini o'z ichiga oladi.

Tur short

short turi short int so'zidan kelib chiqqan. U qisqa butun deb ham ataladi. int turidan farqli o'laroq, uning uzunligi atigi ikki bayt va mumkin bo'lgan qiymatlar diapazoni -32,768 dan +32,767 gacha.

Ya'ni, unda millionlik son ham saqlab bo'lmaydi. Hatto 50 mingni ham. Bu Java-da eng kam ishlatiladigan butun turidir. Asosan, xotirada tejash uchun ishlatiladi.

Aytaylik, sizda oldindan ma'lumki, siz ishlayotgan qiymatlar 30 mingdan oshmaydi va millionlar mavjud.

Masalan, siz yuqori aniqlikdagi rasmlarni ishlov beradigan dastur yozyapsiz: bir rang uchun 10 bit sarflanadi. Rasmda million nuqta bo'lsa. Endi siz int yoki short turini ishlatasizmi, muhim.

Tur long

Ushbu tur long int so'zidan kelib chiqqan — u uzun butun deb ham ataladi. int turidan farqli, uning ajoyib qiymatlar diapazoni mavjud: -9*1018 dan +9*1018 gacha

Nega u asosiy butun tur emas?

Javada bu 90-yillar o'rtalarida paydo bo'lgan, ko'p kompyuterlar 32 bitli edi. Bu barcha protsessorlar 32 bitli sonlar bilan ishlash uchun mo'ljallangan edi. 64 bitli butun sonlar bilan protsessorlar ishlashni bilardi, lekin amallar bilan ishlash sekinlashardi.

Shuning uchun dasturchilar int turini standart butun turi deb belgilashda mantiqan qaror qildilar, long turini esa faqat u zarur bo'lganda ishlatishni tanladilar.

Tur byte

Bu Java-da eng kichik butun tur, lekin eng kam ishlatilmaydigan emas. Uning nomi byte so'zi bilan mos — Java-da minimal manzillanadigan xotira hujayrasi.

byte turidagi qiymatlar diapazoni unchalik katta emas: -128 dan +127 gacha. Lekin undan qattiq kuchi bu emas. byte turi xotirada katta anonim ma'lumotlar blokini saqlash kerak bo'lganda ko'pincha ishlatiladi. byte turidagi massiv bu maqsadlar uchun ideal.

Misol uchun, siz faylni qayerdadir nusxalash kerak bo'ladi.

Siz fayl mazmunini qayta ishlashingiz kerak emas: siz faqat xotira sohasini (bufer) yaratishingiz, fayl mazmunini unga nusxalashingiz va keyin buferdan boshqa faylga ma'lumotlarni yozishingiz kerak. byte turidagi massiv bu maqsadlar uchun judayam kerak.

Rostdan ham, massiv turi o'zgaruvchisida faqat xotira manzili saqlanadi. Bu o'zgaruvchining qiymatini biror metodga yuborganingizda faqat xotira manzili yuboriladi, blok xotira nusxalanmaydi.

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 buferga ma'lumotlarni o'qish
   destFile.write(buffer, 0, size);      // buferdan faylga ma'lumotlarni yozish

   // nusxalashni to'xtatish, agar bufer to'liq to'lmagan bo'lsa
   if (size < buffer.length) break;
}
sourceFile.close();
destFile.close();


3. Real turlar

Primitiv turlar orasida yana ikki real tur mavjud. Garchi bu unchalik to'g'ri nomlanmagan. Rasman ular suzuvchi nuqtali sonlar — floating point numbers deb ataladi. Nomlanishi standartdan kelib chiqqan, bu sonlarda butun va qisman qismi nuqta bilan ajratilgan (vergul bilan emas).

Foydali:

Har bir mamlakatda sonlar yozilishi uchun o'z standarti mavjud (ajab!).

Ko'pchiligimiz nuqta minglarni ajratish uchun, vergul qismlarni ajratish uchun ishlatishda o'rganamiz: masalan, bir million butun va 153 mingdan birini shunday yozamiz 1.000.000,153. Ammo AQShda, da Java yaratuvchilari yashagan, boshqa standart qabul qilingan: 1,000,000.153

Java-da ikki suzuvchi nuqtali primitiv tur mavjud: double va float.

Avval aytganimizdek, bu turlar ichida maxsus tuzilgan: har bir o'zgaruvchining ichida haqiqiy son emas, balki ikkita son mavjud:

Masalan, qisman son 987654.321 ni 0.987654321*106 sifatida ifodalash mumkin. Shuning uchun xotirada u ikki son sifatida ifodalanadi 987654321 (manthisa — sonning ma'nosini ifodalovchi qism) va 6 (eksponenta — o'nlik darajasi)

Tur float

float turining nomi floating point number dan kelib chiqqan. Bu tur juda kichik hajmda — 4 bayt (32 bit), lekin u -3.4*1038 dan 3.4*1038 gacha qiymatlarni saqlay oladi. Mantissa uchun 24 bit va eksponenta uchun 8 bit ajratilgan. Bu tur faqat 8 ta ma'noli sonni saqlay oladi.

Bu usul int dan katta sonlarni saqlash imkonini beradi, o'sha 4 baytdan foydalanib. Ammo shu bilan biz aniqlikni yo'qotamiz. Mantissani saqlash uchun xotiraning qismi sarflanadi, shuning uchun bunday sonlar faqat 6-7 raqamni verguldan keyin saqlaydi, qolganlari kesiladi.

Misol:

Kod O'zgaruvchi qiymati
float a = (float) 123.456789;
123.45679
float a = (float) 12345.9999;
12346.0
float a = (float) -123.456789E-2;
-1.2345679

Ko'rganingizdek, bu turdagi asosiy kamchilik — bu juda kichik ma'noli sonlar va aniqlikning sakkizinchi raqamdan yo'qotilishi. Shuning uchun float turi Java dasturchilari orasida unchalik mashhur emas.

Tur double

double turi standart suzuvchi nuqtali tur hisoblanadi. Uning nomi double floating point dan kelib chiqqan. Uni suzuvchi nuqtali ikki barobar aniq son deb ham atashadi. Barcha suzuvchi sonli literallar standarta double tipiga ega.

Bu tur xotirada 8 bayt joy egallaydi (64 bit) va -1.7*10308 dan 1.7*10308 gacha qiymatlarni saqlay oladi. Muhim jihat shundaki, uning mantissasi uchun 53 bit ajratilgan, qolganlar esa eksponenta uchun.

Bu 15-17 ma'noli sonlarni saqlash imkonini beradi.

Misol:

Kod O'zgaruvchi qiymati
double a = 1234567890.1234567890;
1234567890.1234567
double a = 1234567890.1234512345;
1234567890.1234512
double a = 1234567890.1357913579;
1234567890.1357913

Bu aniqlik, ayniqsa float turi bilan solishtirilganda, aniqlik belgilab beradi: barcha amallarni 99% suzuvchi nuqtali sonlar double turi bilan bajariladi.

Eksponenta uchun 11 bit ajratilgan, bu o'nlikning darajasini -323 dan +308 gacha (ikki darajasi -1024 dan +1023 gacha) saqlash imkonini beradi. double turi yuzlab nollardan keyingi qism bilan sonni ham saqlashga qodir:

Kod O'zgaruvchi qiymati
double a = 2E-300 * 3E+302
600.0


4. Cheksizlik

Suzuvchi nuqtali sonlar yana bir qiziqarli xususiyatga ega: ular maxsus qiymat, ya'ni cheksizlikni saqlashga imkon beradi. Ham musbat ham manfiy cheksizlik bo'lishi mumkin.

Misollar:

Kod Izoh
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

Agar cheksizlikni son bilan ko'paytirsangiz, cheksizlik chiqadi. Agar cheksizlikka son qo'shsangiz, yana cheksizlik chiqadi. Judayam qulay.

Non-son (NaN)

Cheksizlik bilan bajarilgan har qanday amallar cheksizlikni beradi. Umuman olganda, lekin hammasi emas.

Suzuvchi nuqtali sonlar yana bir maxsus qiymatni saqlashi mumkin — NaN. Bu Not a Number (non-son) so'zining qisqartmasi.

Matematika, agar cheksizlikni cheksizlikka bo'linsa, noaniqlik paydo bo'lishi kerak.

Yaxshi, endi Javada, agar cheksizlikni cheksizlikka bo'lsa, NaN bo'ladi.

Misollar:

Kod Izoh
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

Har qanday NaN bilan bajarilgan amal NaNni beradi.



5. Tur char

Primitiv turlar orasida Java da yana bir tur bor, unga alohida e'tibor berishga arziydi — char turi. Uning nomi Character so'zidan kelib chiqqan va bu tur belgilarni saqlash uchun ishlatiladi.

Shunday qilib, belgilar satrlarni tashkil qiladi: har bir satr o'zida belgilar massivini o'z ichiga oladi.

Lekin yanada qiziqarli fakt shundaki, char turi — bu sonli tur ham! Ya'ni, ikki maqsadli tur.

Barcha gap shundaki, aslida char turi belgilarni emas, balki Unicode kodlashidan belgi kodlarini saqlaydi. Har bir belgi o'ziga xos son — belgi kodi mavjud.

Har bir char turi o'zgaruvchisi xotirada ikki bayt (xuddi short turi) egallaydi. Ammo short turidan farqli, char sonli turi — imzosiz va 0 dan 65,535 gacha qiymatlarni saqlay oladi.

char turi — bu gibrid tur. Uning qiymatlarini sonlar sifatida (ularni qo'shish va ko'paytirish mumkin) yoki belgilar sifatida izohlash mumkin. Bu shunday qilingan edi, chunki belgilar vizual tasvirga ega bo'lishiga qaramay, kompyuter uchun ular birinchi navbatda faqat sonlar. Va ularni sonlar bilan ishlash ancha qulay.

Unicode

Unicode — bu maxsus jadval (kodlash), unda dunyoning barcha belgilar mavjud. Va har bir belgi o'z raqamiga ega. U taxminan quyidagicha ko'rinadi:

Примитивные типы в Java

char turidagi o'zgaruvchiga qiymat berishni bir necha usullar mavjud.

Kod Tavsif
char a = 'A';
a o'zgaruvchisi lotin A harfini saqlaydi.
char a = 65;
a o'zgaruvchisi lotin A harfini saqlaydi. Uning kodi xaqiqatdan 65 raqami.
char a = 0x41;
a o'zgaruvchisi lotin A harfini saqlaydi.
Uning kodi xaqiqatdan 65, bu 41 raqamiga teng o'n oltinchi tizimda.
char a = 0x0041;
a o'zgaruvchisi lotin A harfini saqlaydi.
Uning kodi xaqiqatdan 65, bu 41 raqamiga teng o'n oltinchi tizimda.
Ikki ortiqcha nol hech narsani o'zgartirmaydi.
char a = '\u0041';
a o'zgaruvchisi lotin A harfini saqlaydi.
Belgining kodiga ko'ra belgilashning yana bir usuli.

Ko'pchilik faqat belgi ichidagi belgini (jadvalning birinchi qatordagi kabi) ko'rsatadi. Yana oxirgi usul ham juda mashhur. Uning afzalligi shundaki, uni satrlar ichida ishlatish mumkin.

Va biz aytganimizdek, char turi — bu sonli tur ham, shuning uchun shunday yozish mumkin:

Kod Ekraan chiqishi
char a = 'A';
a++;
System.out.println(a);
Ekraan lotin B harfini chiqaradi.
Chunki:
A – 65
B – 66
C – 67

char turi bilan ishlash

Har bir char belgisi — bu birinchi navbatda son (belgi kodi), keyin esa belgi. Belgi kodini bilib, uni dasturda olish mumkin. Misol:

Kod Ekraan chiqishi
char c = (char) 1128;
System.out.println(c);

Ѩ

Standart kodlar

Eng ma'lum belgi kodlari:

Belgilar 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. Tur boolean

Va oxirgi primitiv tur — bu boolean.

Bilishingizcha, u faqat ikki qiymat olish mumkin: true va false.

Aslida, ushbu tur haqida bilishingiz kerak bo'lgan barcha narsani bilasiz.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION