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 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
|---|---|
|
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 tipini int-ə çevirmək üçün isə aşağıdakı kod yazmaq lazımdır:
int ad = variable.intValue();
Burada ad — int tipli dəyişənin adı, variable isə Integer tipli obyekt üçün dəyişən reference-dir.
Nümunələr:
| Kod | Qeyd |
|---|---|
|
|
|
|
|
|
|
|
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 |
|---|---|
|
5-i Integer classına bükürükInteger obyektindən qiymət alırıqYeni 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ü |
|---|---|
|
|
|
|
|
|
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ə int və Integer tipləri arasında fərq qoymamaq mümkündür.
Nümunələr:
| Kod | Kompilyatorun yaratdığı |
|---|---|
|
|
|
|
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 Integer və Integer müqayisə edirsinizsə, bu zaman istinadlar müqayisə olunur, dəyərlər yox.
| Kod | Ekranda çıxış |
|---|---|
|
|
|
|
a və b 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 |
|---|---|
|
|
GO TO FULL VERSION