JavaRush /Java blogi /Random-UZ /Java integer sinf qo'llanma

Java integer sinf qo'llanma

Guruhda nashr etilgan
Ushbu maqolada Integer sinfi haqida gapiramiz. Keling, ushbu savollarni ko'rib chiqaylik:
  • o'rash sinflari nima;
  • primitivlarni avtomatik qadoqlash/ochish;
  • Integer sinfining ishlashi, uning usullari va konstantalari.
Java Integer Class qo'llanmasi - 1

Ibtidoiy turlarning o'rash sinflari

Ma'lumki, Java turli xil ma'lumotlar turlariga ega, ularni ikki blokga bo'lish mumkin:
  • ibtidoiy;
  • ma'lumotnoma.
Java-da bir nechta ibtidoiy ma'lumotlar turlari mavjud:
  • butun sonlar - bayt, qisqa, int, uzun;
  • suzuvchi nuqtali raqamlar (haqiqiy) - float, double;
  • mantiqiy ma'lumotlar turi - mantiqiy;
  • belgilar ma'lumotlar turi - char.
Har bir ibtidoiy ma'lumotlar turi o'zining o'rash sinfiga ega. O'zining ibtidoiy kichik birodarini Java ob'ektiga o'raydigan mos yozuvlar ma'lumotlar turi. Quyida ibtidoiy ma'lumotlar turlari va ularning tegishli o'rash sinflari keltirilgan:
Primitiv tip O'rash sinfi
bayt Bayt
qisqa Qisqa
int Butun son
uzoq Uzoq
suzmoq Float
ikki barobar Ikki marta
mantiqiy Mantiqiy
char Xarakter
Amaliy ma'noda, ibtidoiy va ularning o'rash sinflari juda ko'p umumiy xususiyatlarga ega. Aksariyat operatsiyalar bir xil tarzda amalga oshiriladi. Biroq, o'rash sinflari ibtidoiylarga xos bo'lmagan bir qator xususiyatlarga ega. Birinchidan, sinflar mavjud: o'rash sinflari bilan ishlashda biz ob'ektlar bilan ishlaymiz. Ikkinchidan (quyidagi hamma narsa birinchi nuqtadan kelib chiqadi), bu ob'ektlar null bo'lishi mumkin. Uchinchidan, o'rash sinflari ma'lum bir turdagi ma'lumotlar bilan ishlashni osonlashtiradigan bir qator konstantalar va usullarni taqdim etadi. Ushbu maqolada Integer sinfi bilan ishlashni batafsil ko'rib chiqamiz.

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

Integer a = 6;
Integer b = 2;
Integer c = a + b;
System.out.println(c); // 8
Ayirmoq

Integer a = 6;
Integer b = 2;
Integer c = a - b;
System.out.println(c); // 4
Ko'paytiring

Integer a = 6;
Integer b = 2;
Integer c = a * b;
System.out.println(c); // 12
Bo'lmoq

Integer a = 6;
Integer b = 2;
Integer c = a / b;
System.out.println(c); // 3
O'sish

Integer a = 6;
a++;
++a;
System.out.println(a); // 8
Kamaytirish

Integer a = 6;
a--;
--a;
System.out.println(a); // 4
Biroq, bularning barchasi bilan siz ehtiyot bo'lishingiz kerak va Integer mos yozuvlar ma'lumotlar turi ekanligini va bu turdagi o'zgaruvchi null bo'lishi mumkinligini yodda tutishingiz kerak. Bunday holda (agar o'zgaruvchi null bo'lsa), arifmetik operatsiyalardan voz kechish yaxshiroqdir (va null yaxshi natija bermaydigan boshqa har qanday). Mana bir misol:
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
Keling, quyidagi kodni ishga tushirish orqali ushbu konstantalarning barcha qiymatlarini ko'rib chiqaylik:
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)
Bu usul Stringni int ga o'zgartiradi. Keling, ushbu usul qanday ishlashini ko'rsatamiz:
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)
Bu usul s parametrini int ga aylantiradi. Radix parametri dastlab s dagi son qaysi sanoq sistemasida yozilganligini, uni int ga aylantirish kerakligini bildiradi. Quyidagi misollar:
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.
Misollar:
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.
Misol:
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.
Misollar:
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

  1. 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.

  2. Materialni birlashtirish uchun kichik oddiy masalani hal qiling.

    Bizda ikkita raqam bor:

    1100001001 - ikkilik sanoq sistemasida
    33332 - kvinar sanoq sistemasida

    Faqat 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.

  3. Maksimal mumkin bo'lgan Integer qiymatini sakkizlik sanoq tizimiga aylantiring va natijada olingan sondagi raqamlar sonini ko'rsating (raqamni dasturiy tarzda sanang).

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