CodeGym /Kurslar /Java SELF AZ /Java-da Wrapper tipləri

Java-da Wrapper tipləri

Java SELF AZ
Səviyyə , Dərs
Mövcuddur

1. Wrapper tipləri siyahısı

Hamınız bilirsiniz ki, Java-da 8 primitv tip var və bunlar class deyil. Bir tərəfdən bu yaxşıdır: onlar sadədir və az yer tuturlar, amma o biri tərəfdən — bəzən məhz class-lar lazımdır. Onların niyə lazım olduğunu növbəti mühazirədə öyrənəcəksiniz.

Bəs indi nə etmək?

Java 5 versiyasından başlayaraq, primitv tiplər üçün "əkiz" class-lar yaranıb. Hər bir belə class-a müəyyən tipdən olan bir dəyəri saxlayan bir field daxildir. Bu cür class-lara wrapper tipləri də deyirlər, çünki onlar sanki primitv dəyərləri class-lara "bürüyürlər".

Bu tiplərin siyahısı belədir, bir şey tanış gəlirmi?

Primitiv tip Wrapper class
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
boolean
Boolean

Primitiv tiplərin adları kiçik hərflərlə, class-ların adları isə böyük hərflərlə yazılır. Həmçinin, class-ların adları bir az uzundur: Integer əvəzinə int və ya Character əvəzinə char.

Wrapper class-ların bütün obyektləri dəyişdirilə bilməz (immutable).

Integer class-ının sadələşdirilmiş kodu təxminən belə görünür:

Kod Qeyd
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);
   }
}


Dəyər dəyişəni

Constructor




Metod dəyəri qaytarır




Statik metod Integer obyekti yaradır və int tipində dəyişəni saxlayır.

2. int tipini Integer-ə çevirmək

Wrapper tipləri özlərinin primitiv analogları hesab olunur: primitiv tip üçün asanlıqla uyğun object-wrapper yaradıla bilər.

Primitiv tiplərin və onların wrapper tiplərinin qarşılıqlı əlaqəsini int tipi nümunəsində müzakirə edək. int tipini Integer-ə və əksinə çevirmək kodu belə ola bilər:

int tipini Integer-ə çevirmək üçün aşağıdakı kodu yazmaq lazımdır:

Integer ad = new Integer(deyer);

Burada ad — Integer tipli dəyişənin adı, deyer isə int tipində olan dəyərdir.

Nümunələr:

Kod Qeyd
Integer age = new Integer(18);
Integer hundred = new Integer(100);
Integer zero = new Integer(0);

Integer tipini int-ə çevirmək üçün isə aşağıdakı kod yazmaq lazımdır:

int ad = variable.intValue();

Burada adint tipli dəyişənin adı, variable isə Integer tipli obyekt üçün dəyişən reference-dir.

Nümunələr:

Kod Qeyd
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 və unboxing

Amma hətta sadə əməliyyatları Integer tipi ilə yazmaq asan deyil.

Artıq dediyimiz kimi, Integer tipi dəyişməzdir (immutable). int tipli yeni bir qiymətə malik Integer obyektini yaratmaq üçün, yeni bir Integer obyektini aydın şəkildə yaratmaq lazımdır. Amma Integer obyektinin içərisində saxlanılan int tipli qiyməti əldə etmək asandır: sadəcə intValue() metodunu çağırmaq lazımdır.

Nümunə:

Kod Təsvir
Integer a = Integer.valueOf(5);
int b = a.intValue();
Integer c = new Integer(b + 5)
5-i Integer classına bükürük
Integer obyektindən qiymət alırıq
Yeni Integer == 10 qiyməti yaradırıq

Kod bir az həcmli görünmür?

Java-nın yaradıcıları da belə düşünürlər və buna görə kompilyatora bu əməliyyatları avtomatik həyata keçirməyi öyrətmişlər. int-i Integer-ə avtomatik çevirmə prosesinə autoboxing (box — qutu, qutuya qoymaq), əks prosesə isə — Integer-dən int-ə — unboxing deyilir.

Sizin kodunuz Kompilyatorun gördüyü
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 və unboxing sayəsində, siz int tipini Integer-ə və ya əksinə, sərbəst şəkildə qoşa bilərsiniz. İstənilən mürəkkəblikdə ifadələri yazmaq və intInteger tipləri arasında fərq qoymamaq mümkündür.

Nümunələr:

Kod Kompilyatorun yaratdığı
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 siniflərinin dəyişənlərinin müqayisəsi

Autoboxing və unboxing çox sadə və şəffaf işləyir: harada lazımdırsa, Integer()-də yeni obyekt yaradılır, harada lazımdırsa, intValue() metodları çağırılır.

Siz bir proqramçı kimi hər şey asan və başa düşülən işləyir. Amma unutmayın ki, əgər IntegerInteger müqayisə edirsinizsə, bu zaman istinadlar müqayisə olunur, dəyərlər yox.

Kod Ekranda çıxış
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

ab dəyişənləri dəyərləri (məsələn, int tipləri kimi) saxlamır, əksinə obyektlərə istinadlar saxlayır. Buna görə düzgün müqayisə etmə metodu barədə yadınızda saxlayın:

Səhv Düzgün
Integer a = 1000;
Integer b = 1000;
if (a == b)
{
   ...
}
Integer a = 1000;
Integer b = 1000;
if (a.equals(b))
{
   ...
}

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION