Wrapper types, Boxing and Unboxing
UPDATE : 02.06.21 Wrapper type - lar nedir ve niye istifade olunur ?
- Wrapper type-lar ozlerinde reference type saxlasalar da eslinde primitive typelardan ibaretdirler. meselen Integer bir class olsa da ona verdiyimiz her hansisa int deyer ele class daxilinde olan bir int field da saxlanilir. Wrapper type-lar primitive typelarin daha genish variantidir. Elave ozellikler, yeni methodlar ve ya lazimli deyishenler ozunde saxlayir.
Java da ishletdiyimiz int, long, float kimi tipler eslinde class lara aid tiplerdir. Yeni bu tiplerin her birinin ozune mexsus classi var. Meselen :
Integer i = new Integer(5);
Integer i2 = 5;
yazmaq , eslinde eyni menaya gelir. 2ci usuldaki kimi yaradanda, artiq Integer obyektini ozu yaradir. Bu proses Boxing adlanir.
Verdiyimiz deyer , hemin obyektdeki int deyishenine menimsedilir.
Burada esas ferq bundan ibaretdir ki, meselen :
Integer i = 5;
Integer i2 = 5;
Integer i3 = new Integer(5);
burada, birinci obyekt yaranan zaman 5 boxing olunur ve yaddash da saxlanir. i2 yaranan zaman deyerler eyni oldugundan yeniden deyeri 5 olan obyekt yaratmir. Evvel yaratdigi obyekti istifade edir.
Evvelki yaratidigi obyekti istifade etmek uchun deyerlerin limiti movcuddur. Bu limit 127 - dir. Yeni deyer olaraq 128 menimsetsek, artiq her bir Integer obyekti uchun yenin obyekt yaradacaq ve referanslar ferqli olacaqLakin, i3 yaranan zaman, biz ozumuz new Integer(5) dediyimiz uchun, evvel avtomatik yaranan 5 obyekti nezere alinmir ve yeni obyekt yaranir.
Bunu praktikada ashagidaki shekilde gore bilerik.
System.out.println(i == 5);
System.out.println(i == i2);
System.out.println(i == i3);
Bu "sout" proseslerini incelesek :
1ci halda, i obyekt olmagina baxmayaraq deyerle muqayise olunur. Burada artiq Unboxing prosesi bash verir. Java ozu avtomatik olaraq, i obyektindeki int deyishenine chatir ve hemin deyeri istifade edir. Aparilan muqayisede ekrana true chixacaq.
2ci halda, bayaq dediyimiz kimi boxing olunan 5 deyeri eyni obyekt olduguna gore , i ve i2 obyektlerin reference - lari bir birine beraberdir. Buna gore ekrana true chixacaq.
Lakin bele bir hal mumkundur ki, yuxarda dediyimiz limit ashsin. Meselen yaratdigimiz Integer obyektine 128 ve daha yuksek eded menimsetsek bu zaman her biri uchun ayri obyekt yaranacaq ve buna gore refenrence lar ferqli olacaq. Sout neticesi false olacaq.
3.cu halda, i3 obyektine biz ozumuz obyekt yaradib menimsetdiyimize gore artiq bu obyekt ayri reference-a sahib ve deyeri 5 olan obyekte baxir. Baxmayaraq ki , deyerler eynidir, lakin reference-lar ferqli olduguna gore burada ekrana false chixacaq. Chunki 1ci haldan ferqli olaraq burada obyektle obyekt muqayise olunur. Hech bir unboxing prosesi bash vermir. Yalniz reference-lar muqayise olunur.
i ve i3 obyektlerinin deyerlerini muqayise etmek uchun Integer class -nin equal metodundan istifade etmek lazimdir.
3.cu halda, i3 obyektine biz ozumuz obyekt yaradib menimsetdiyimize gore artiq bu obyekt ayri reference-a sahib ve deyeri 5 olan obyekte baxir. Baxmayaraq ki , deyerler eynidir, lakin reference-lar ferqli olduguna gore burada ekrana false chixacaq. Chunki 1ci haldan ferqli olaraq burada obyektle obyekt muqayise olunur. Hech bir unboxing prosesi bash vermir. Yalniz reference-lar muqayise olunur.
i ve i3 obyektlerinin deyerlerini muqayise etmek uchun Integer class -nin equal metodundan istifade etmek lazimdir.
Comments
Post a Comment