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