- o'rash sinflari nima;
- primitivlarni avtomatik qadoqlash/ochish;
- Integer sinfining ishlashi, uning usullari va konstantalari.
Ibtidoiy turlarning o'rash sinflari
Ma'lumki, Java turli xil ma'lumotlar turlariga ega, ularni ikki blokga bo'lish mumkin:- ibtidoiy;
- ma'lumotnoma.
- butun sonlar - bayt, qisqa, int, uzun;
- suzuvchi nuqtali raqamlar (haqiqiy) - float, double;
- mantiqiy ma'lumotlar turi - mantiqiy;
- belgilar ma'lumotlar turi - char.
Primitiv tip | O'rash sinfi |
---|---|
bayt | Bayt |
qisqa | Qisqa |
int | Butun son |
uzoq | Uzoq |
suzmoq | Float |
ikki barobar | Ikki marta |
mantiqiy | Mantiqiy |
char | Xarakter |
Butun son
Integer klassi int ibtidoiy turdagi o'rash sinfidir. Bu sinfda int tipidagi bitta maydon mavjud. O'rash sinfi sifatida Integer ints bilan ishlashning turli usullarini, shuningdek, intni Stringga va Stringni intga aylantirishning bir qancha usullarini taqdim etadi. Quyida biz sinf bilan ishlashning turli misollarini ko'rib chiqamiz. Keling, ijoddan boshlaylik. Eng ko'p ishlatiladigan (va ulardan foydalanish eng oson) quyidagi yaratish variantidir:
Integer a = 3;
Ya'ni, bu holda Integer o'zgaruvchini ishga tushirish int o'zgaruvchisini ishga tushirishga o'xshaydi. Bundan tashqari, Integer o'zgaruvchisi int o'zgaruvchining qiymati bilan ishga tushirilishi mumkin:
int i = 5;
Integer x = i;
System.out.println(x); // 5
Yuqoridagi holatda avtomatik qadoqlash bilvosita sodir bo'ladi. Bu haqda quyida batafsilroq gaplashamiz. Yuqorida sanab o'tilgan ishga tushirish opsiyalariga qo'shimcha ravishda Integer o'zgaruvchisi boshqa ob'ektlar kabi konstruktor va new kalit so'zidan foydalanib yaratilishi mumkin:
Integer x = new Integer(25);
System.out.println(x);
Biroq, yozish va o'qish uchun ko'proq vaqt talab etiladi, shuning uchun bu variant eng kam tarqalgan. Siz int o'zgaruvchilari bilan bajarishingiz mumkin bo'lgan integer o'zgaruvchilari bilan hamma narsani qilishingiz mumkin. Ular bo'lishi mumkin:
Katlamoq |
|
Ayirmoq |
|
Ko'paytiring |
|
Bo'lmoq |
|
O'sish |
|
Kamaytirish |
|
Integer a = null;
Integer b = a + 1; // Здесь мы упадем с "Exception in thread "main" java.lang.NullPointerException"
System.out.println(b);
Ko'pgina taqqoslash operatsiyalari int ibtidoiy turidagi kabi amalga oshiriladi:
Integer a = 1;
Integer b = 2;
System.out.println(a > b);
System.out.println(a >= b);
System.out.println(a < b);
System.out.println(a <= b);
Chiqish:
false
false
true
true
Ikki Integer o'zgaruvchini solishtirish operatsiyasi alohida ajralib turadi. Va bu erda gap shundaki, Integer mos yozuvlar ma'lumotlar turi bo'lib, uning o'zgaruvchilari qiymatlarning o'zlari (ob'ektlar) emas, balki qiymatlarga havolalarni saqlaydi. Ushbu faktning namoyon bo'lishini quyidagi kod fragmentini bajarishda kuzatish mumkin:
Integer a = 1;
Integer b = 1;
Integer c = new Integer(1);
System.out.println(a == b); // true
System.out.println(a == c); // false
Birinchi tenglikning natijasi to'g'ri, ikkinchisi esa noto'g'ri bo'ladi. Buning sababi, birinchi holatda biz bir xil ob'ektga havolalarni saqlaydigan ikkita o'zgaruvchini ("a" va "b") solishtiramiz. Va ikkinchi holatda, biz ikki xil ob'ektga tegishli ikkita o'zgaruvchini solishtiramiz ("c" o'zgaruvchisini yaratishda biz yangi ob'ekt yaratdik). Yana bir qiziqarli misol keltiramiz:
Integer a = 1;
Integer b = 1;
Integer x = 2020;
Integer y = 2020;
System.out.println(a == b); // true
System.out.println(x == y); // false
Ko'rib turganimizdek, birinchi taqqoslashning natijasi to'g'ri, ikkinchisining natijasi esa noto'g'ri. Hammasi keshlash haqida. -128 dan 127 gacha bo'lgan barcha tamsayılar (bu qiymatlarni sozlash mumkin) keshlangan. Shunday qilib, biz yangi o'zgaruvchini yaratganimizda va unga -128 va 127 oralig'ida butun sonni tayinlaganimizda, biz yangi ob'ekt yaratmaymiz, balki o'zgaruvchiga keshda allaqachon yaratilgan ob'ektga havolani tayinlaymiz. Endi, bu haqiqatni bilgan holda, yuqoridagi misol unchalik mistik ko'rinmaydi. a va b o'zgaruvchilari bir xil ob'ektga - keshdagi ob'ektga ishora qiladi. Va x va y o'zgaruvchilarni ishga tushirish paytida biz har safar yangi ob'ekt yaratdik va bu o'zgaruvchilar turli ob'ektlarga havolalarni saqladi. Ma'lumki, == operatori o'zgaruvchilar qiymatlarini taqqoslaydi va mos yozuvlar o'zgaruvchilari qiymatlari havolalardir. Ikki Integer o'zgaruvchisi o'rtasidagi tenglikni to'g'ri tekshirish uchun (qanchalik ahamiyatsiz bo'lishidan qat'iy nazar) teng usulidan foydalanishingiz kerak. Yuqoridagi misolni qayta yozamiz:
Integer a = 1;
Integer b = 1;
Integer x = 2020;
Integer y = 2020;
System.out.println(a.equals(b)); // true
System.out.println(x.equals(y)); // true
Integerni avtomatik qadoqlash va ochish
Avtomatik qadoqlash va ochish nima? Yangi Integer o'zgaruvchilarni yaratishda biz quyidagi konstruktsiyadan foydalandik:Integer a = 2020;
Shunday qilib, biz yangi kalit operatoridan foydalanmasdan yangi ob'ekt yaratdik. Bu int ibtidoiy turdagi autopacking mexanizmi tufayli mumkin. Teskari protsedura Integer mos yozuvlar o'zgaruvchisi qiymatiga ibtidoiy int o'zgaruvchini tayinlashda sodir bo'ladi:
Integer a = 2020;
int x = a;
Bunday holda, biz ibtidoiy o'zgaruvchiga havolani (ya'ni, ob'ektga havola "a" o'zgaruvchisining qiymati) tayinlagan ko'rinadi. Lekin, aslida, avtomatik ochish mexanizmi tufayli 2020 qiymati “x” o‘zgaruvchisiga yozildi.Avtomatik qadoqlash/ochish Java’da juda keng tarqalgan hodisa. Ko'pincha bu o'z-o'zidan sodir bo'ladi, ba'zida hatto dasturchining bilimisiz ham. Ammo siz hali ham bu hodisa haqida bilishingiz kerak. Javarush-da ushbu mavzu bo'yicha qiziqarli maqolamiz bor .
Butun son sinf konstantalari
Integer klassi butun sonlar bilan ishlash uchun turli xil konstantalar va usullarni taqdim etadi. Ushbu bo'limda biz ulardan ba'zilarini amalda batafsil ko'rib chiqamiz. Keling, doimiylardan boshlaylik. Quyidagi jadvalda barcha sinf konstantalari ko'rsatilgan:Kostanta | Tavsif |
---|---|
SIZE | Ikki xonali sanoq sistemasidagi int tipi egallagan bitlar soni |
BAYT | Ikki xonali sanoq sistemasidagi int tipi egallagan baytlar soni |
MAX_VALUE | int turi ushlab turadigan maksimal qiymat |
MIN_VALUE | int turi ushlab turadigan minimal qiymat |
TYPE | int turidan Class tipidagi obyektni qaytaradi |
public static void main(String[] args) {
System.out.println(Integer.SIZE);
System.out.println(Integer.BYTES);
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.TYPE);
}
Natijada biz quyidagi natijani olamiz:
32
4
2147483647
-2147483648
int
Integer sinfining usullari
Endi Integer sinfining eng ko'p qo'llaniladigan usullarini qisqacha ko'rib chiqamiz. Shunday qilib, "yuqori"lar qatordan raqamni o'zgartirish yoki qatorni raqamdan o'zgartirish usullari bilan boshqariladi. Keling, satrni raqamga aylantirishdan boshlaylik. Ushbu maqsadlar uchun parseInt usuli qo'llaniladi , imzo quyida:-
static int parseInt(String s)
int i = Integer.parseInt("10");
System.out.println(i); // 10
Agar konvertatsiya qilishning iloji bo'lmasa, masalan, biz parseInt usuliga so'z uzatdik - NumberFormatException tashlanadi. parseInt(String s) usuli haddan tashqari yuklangan birodarga ega:
-
static int parseInt(String s, int radix)
System.out.println(Integer.parseInt("0011", 2)); // 3
System.out.println(Integer.parseInt("10", 8)); // 8
System.out.println(Integer.parseInt("F", 16)); // 15
parseInt usullari int ibtidoiy ma'lumotlar turini qaytaradi. Ushbu usullarning analogi mavjud - the valueOf usuli . Ushbu usulning ba'zi o'zgarishlari oddiygina parseInt-ni ichki chaqiradi. parseInt dan farqi shundaki, valueOf natijasi int emas, balki butun son bo'ladi. Quyida ushbu usulning barcha variantlarini va uning qanday ishlashiga misol keltiramiz:
- static Integer valueOf(int i) - qiymati i bo'lgan butun sonni qaytaradi;
- static Integer valueOf(String s) - parseInt(String s) ga o'xshaydi, lekin natija Integer bo'ladi;
- statik Integer valueOf(String s, int radix) - parseInt(String s, int radix) ga o'xshash, ammo natija Integer bo'ladi.
int a = 5;
Integer x = Integer.valueOf(a);
Integer y = Integer.valueOf("20");
Integer z = Integer.valueOf("20", 8);
System.out.println(x); // 5
System.out.println(y); // 20
System.out.println(z); // 16
Stringni int/Integerga aylantirish imkonini beruvchi usullarni ko‘rib chiqdik. Teskari protsedura toString usullari yordamida amalga oshiriladi . Siz har qanday Integer ob'ektida toString usulini chaqirishingiz va uning qator ko'rinishini olishingiz mumkin:
Integer x = 5;
System.out.println(x.toString()); // 5
Biroq, toString usuli ko'pincha ob'ektlarda bevosita chaqirilganligi sababli (masalan, ob'ektni chop etish uchun konsolga yuborishda), bu usul ishlab chiquvchilar tomonidan kamdan-kam hollarda qo'llaniladi. Bundan tashqari, toString statik usuli mavjud bo'lib, u int parametrini oladi va uni satr tasviriga aylantiradi. Masalan:
System.out.println(Integer.toString(5)); // 5
Biroq, statik bo'lmagan toString usuli kabi, statik usuldan aniq foydalanish kamdan-kam uchraydi. ToString statik usuli qiziqroq, u 2 ta butun son parametrlarini oladi:
- statik String toString(int i, int radix) - i ni radix sanoq sistemasidagi satr tasviriga aylantiradi.
System.out.println(Integer.toString(5, 2)); // 101
Integer klassi ikkita raqamning maksimal/minimalini topish uchun bir nechta usullarga ega:
- static int max(int a, int b) o'tkazilgan o'zgaruvchilar orasida eng katta qiymatni qaytaradi;
- static int min(int a, int b) o'tkazilgan o'zgaruvchilar orasida eng kichik qiymatni qaytaradi.
int x = 4;
int y = 40;
System.out.println(Integer.max(x,y)); // 40
System.out.println(Integer.min(x,y)); // 4
Xulosa
Ushbu maqolada biz Integer sinfini ko'rib chiqdik. Biz bu qanday sinf va qanday o'rash sinflari haqida gaplashdik. Biz sinfga amaliy nuqtai nazardan qaradik. Biz arifmetik operatsiyalar misollarini, shu jumladan taqqoslash operatsiyalarini ko'rib chiqdik. Biz ikkita Integer o'zgaruvchisini solishtirishning nozik tomonlarini ko'rib chiqdik va keshlangan ob'ektlar tushunchasini ko'rib chiqdik. Biz ibtidoiy ma'lumotlar turlarini avtomatik qadoqlash/ochish hodisasini ham eslatib o'tdik. Bundan tashqari, biz Integer sinfining ba'zi usullarini, shuningdek, ba'zi konstantalarni ko'rib chiqishga muvaffaq bo'ldik. Ular sonlarni bir sanoq sistemasidan ikkinchisiga o‘tkazishga misollar keltirdilar.Uy vazifasi
-
Integer sinfining yana qanday usullari mavjudligini o'rganing (ularni rasmiy hujjatlar bilan veb-saytda o'rganishingiz mumkin ), sharhlarda siz o'rgangan usullardan qaysi biri (maqolada keltirilganlardan tashqari) sizning fikringizcha eng foydali ekanligini yozing ( siz ko'pincha foydalanasiz). Shuningdek, fikringiz uchun sabablarni keltiring.
PS Bu erda to'g'ri javoblar yo'q, lekin bu mashg'ulot sizga sinfni yaxshiroq o'rganish imkonini beradi.
-
Materialni birlashtirish uchun kichik oddiy masalani hal qiling.
Bizda ikkita raqam bor:
1100001001 - ikkilik sanoq sistemasida
33332 - kvinar sanoq sistemasidaFaqat Integer klassining usullaridan foydalanib, berilgan ikkita son orasidagi maksimalni aniqlash, so'ngra uchlik sanoq tizimida maksimal va minimal qiymat o'rtasidagi farqni ko'rsatish kerak.
-
Maksimal mumkin bo'lgan Integer qiymatini sakkizlik sanoq tizimiga aylantiring va natijada olingan sondagi raqamlar sonini ko'rsating (raqamni dasturiy tarzda sanang).
GO TO FULL VERSION