1. Wrapper turlari ro'yxati
Hammamizga ma'lum, Java-da klasslar emas bo'lgan 8 ta primitiv tur mavjud. Bir tomondan, bu yaxshi: ular oddiy va kam joy egallaydi, lekin boshqa tomondan ba'zan aynan klasslar kerak bo'ladi. Nima uchun aynan ular kerakligini keyingi ma'ruzada bilib olasiz.
Nima qilish kerak?
Beshinchi versiyadan boshlab, Java-da primitiv turlar uchun twin-klasslar paydo bo'ldi. Har bir shunday klass ichida aniq turdagi qiymat bilan bir maydon saqlaydi. Shunday klasslar wrapper turlari deb ham ataladi, chunki ular primitiv qiymatlarni klasslarga o'rab qo'yadi.
Mana bunday turlarning ro'yxati, hech tanish narsa yo'qmi?
| Primitiv tur | Wrapper klass |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Primitiv turlarning nomlari kichik harflar bilan, klasslarning esa katta harflar bilan yoziladi. Klasslarning nomlari ozgina uzunroq: Integer o'rniga int va Character o'rniga char.
Barcha wrapper klasslarining ob'ektlari immutable, ya'ni o'zgarmasdir.
Integer klassining sodda kod ko'rinishi taxminan quyidagicha:
| Kod | Eslatma |
|---|---|
|
Qiymatli o'zgaruvchi Konstruktur Qiymatni qaytaruvchi metod Statik metod yangi Integer ob'ekt yaratadi int turdagi o'zgaruvchi uchun |
2. int turini Integer turiga o'zgartirish
Wrapper turlar oddiy primitiv turdoshlariga o'xshash hisoblanadi: primitiv tur uchun mos wrapper obyektni osongina yaratishingiz mumkin.
Primitiv turlar va ularning wrapper turlarining o'zaro ta'sirini int turi misolida ko'rib chiqamiz. Mana qanday qilib int turini Integer turiga va aksincha aylantirish mumkin:
int turini Integer turiga aylantirish uchun kod yozish kerak:
Integer nomi = new Integer(qiymat);
Bu erda nomi — bu Integer turidagi o'zgaruvchining nomi, va qiymat — bu int turidagi o'ralgan qiymat.
Misollar:
| Kod | Eslatma |
|---|---|
|
|
|
|
|
Va Integer turini int turiga aylantirish uchun kod yozish kerak:
int nomi = ozgaruvchi.intValue();
Bu erda nomi — bu int turidagi o'zgaruvchining nomi, va ozgaruvchi — bu Integer turidagi obyektga yo'naltirilgan o'zgaruvchi.
Misollar:
| Kod | Eslatma |
|---|---|
|
|
|
|
|
|
|
|
3. Autoboxing va unboxing
Biroq, hatto oddiy Integer turi bilan operatsiyalarni yozish juda qiyin.
Biz allaqachon aytganimizdek, Integer turi — о'zgarmas (immutable). int turidagi yangi qiymat bilan Integer turidagi obyektni yaratish uchun dastur ochiq Integer obyektini yaratishi lozim. Ammo Integer obyektining ichidagi int turidagi qiymatni olish juda oson: intValue() metodini chaqirish kerak.
Misol:
| Kod | Ta'rif |
|---|---|
|
Qiymat 5 ni Integer klassiga o'rashInteger ob'ektidan qiymatni olishInteger == 10 yangi qiymat yaratish |
Kod juda uzun, to'g'rimi?
Java yaratuvchilari ham shunday fikrda, shuning uchun ular kompilyatorega bu operatsiyalarni avtomatik qilishni o'rgatishdi. int ni Integer ga avtomatik o'zgartirish autoboxing (box - quti, box ichiga joylashtirish) deb ataladi, aksincha — Integer dan int ga — unboxing.
| Sizning kodingiz | Kompilyator nimani ko'radi |
|---|---|
|
|
|
|
|
|
Autoboxing va unboxing tufayli, siz tinchlikda int turini Integer turiga va aksincha tayinlay olasiz. Har qanday murakkablikdagi ifodalarni yozishingiz va int va Integer turlarini ajratishingiz shart emas.
Misollar:
| Kod | Kompilyator nimani yaratadi |
|---|---|
|
|
|
|
4. Wrapper klass o'zgaruvchilarini taqqoslash
Autoboxing va unboxing juda sodda va tushunarli ishlaydi: qaerda kerak bo'lsa — yangi Integer() yaratish buyruqlari qo'yiladi, qaerda kerak bo'lsa — intValue() metodlari chaqiriladi.
Dasturchi sifatida barchasi siz uchun yengil va tushunarli ishlaydi. Ammo shuni yodda tutingki, agar Integer va Integer ni taqqoslasangiz, bu qiymatlarning emas, balki referenslarning taqqoslanishi bo'ladi.
| Kod | Ekranga chiqarish |
|---|---|
|
|
|
|
a va b o'zgaruvchilari qiymatlar (int turlari singari) emas, balki obyektlarga referenslarni saqlaydi. Shuning uchun qanday qilib ularni to'g'ri taqqoslashni eslab qoling:
| Noto'g'ri | To'g'ri |
|---|---|
|
|
GO TO FULL VERSION