Wrapper turlari

All lectures for UZ purposes
Daraja, Dars
Mavjud

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
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
boolean
Boolean

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
public class Integer
{
   private int value;

   Integer(int x)
   {
      this.value = x;
   }

   public int intValue()
   {
      return this.value;
   }

   public static Integer valueOf(int x)
   {
      return new Integer(x);
   }
}


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
Integer age = new Integer(18);
Integer hundred = new Integer(100);
Integer zero = new Integer(0);

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
Integer age = new Integer(18);
int x = age.intValue();

x == 18
Integer hundred = new Integer(100);
int y = hundred.intValue();

y == 100
Integer zero = new Integer(0);
int z = zero.intValue();


z == 0
int i = 110;
Integer zero = new Integer(i);
int z = zero.intValue();

z == 110

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
Integer a = Integer.valueOf(5);
int b = a.intValue();
Integer c = new Integer(b + 5)
Qiymat 5 ni Integer klassiga o'rash
Integer ob'ektidan qiymatni olish
Integer == 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
Integer a = 10;
Integer a = Integer.valueOf(10);
int b = a;
int b = a.intValue();
Integer c = a + b;
Integer c = Integer.valueOf(a.intValue() + b);

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
Integer a = 5;
int b = a;
Integer c = a + b;
int d = a + b + c;
Integer a = Integer.valueOf(5);
int b = a.intValue();
Integer c = Integer.valueOf(a.intValue() + b);
int d = a.intValue() + b + c.intValue();
Integer a = 5;
int b = 5;

if (a == b)
{
   ...
}
Integer a = Integer.valueOf(5);
int b = 5;

if (a.intValue() == b)
{
   ...
}


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
Integer a = 1000;
Integer b = 1000;

System.out.println(a == b);



false
Integer a = 1000;
Integer b = 1000;

System.out.println(a.equals(b));



true

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
Integer a = 1000;
Integer b = 1000;
if (a == b)
{
   ...
}
Integer a = 1000;
Integer b = 1000;
if (a.equals(b))
{
   ...
}

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