logo

Otomatik Kutulama ve Kutudan Çıkarma:

İlkel veri türlerinin otomatik olarak eşdeğer Sarmalayıcı türüne dönüştürülmesi, kutulama olarak bilinir ve bunun tersi işlem, kutudan çıkarma olarak bilinir. Bu Java5'in yeni özelliğidir. Yani Java programcısının dönüşüm kodunu yazmasına gerek yoktur.

Otomatik Kutulama ve Kutudan Çıkarmanın Avantajı:

İlkeller ve Sarmalayıcılar arasında manuel olarak dönüştürme yapılmasına gerek yoktur, dolayısıyla daha az kodlama gerekir.

Java'da Basit Otomatik Kutulama Örneği:

 class BoxingExample1{ public static void main(String args[]){ int a=50; Integer a2=new Integer(a);//Boxing Integer a3=5;//Boxing System.out.println(a2+' '+a3); } } 
Şimdi Test Edin
 Output:50 5 
bu örneği indir

Java'da Basit Kutu Açma Örneği:

Sarmalayıcı sınıf türünün karşılık gelen ilkel türe otomatik olarak dönüştürülmesi Kutu Açma olarak bilinir. Kutu açma örneğini görelim:

 class UnboxingExample1{ public static void main(String args[]){ Integer i=new Integer(50); int a=i; System.out.println(a); } } 
Şimdi Test Edin

Çıktı:

 50 

Karşılaştırma işleçleriyle Otomatik Kutulama ve Kutudan Çıkarma

Otomatik kutulama karşılaştırma operatörleri ile gerçekleştirilebilir. Karşılaştırma operatörüyle boks örneğini görelim:
 class UnboxingExample2{ public static void main(String args[]){ Integer i=new Integer(50); if(i<100){ unboxing internally system.out.println(i); } < pre> <span> Test it Now </span> <pre> Output:50 </pre> <hr> <h3>Autoboxing and Unboxing with method overloading</h3> <table class="table"> <tr><td>In method overloading, boxing and unboxing can be performed. There are some rules for method overloading with boxing: <ul> <tr><td>Widening beats boxing</td>  </tr><tr><td>Widening beats varargs</td>  </tr><tr><td>Boxing beats varargs</td>  </tr></ul> </td></tr> </table> <h3>1) Example of Autoboxing where widening beats boxing</h3> <table class="table"> <tr><td>If there is possibility of widening and boxing, widening beats boxing.</td></tr> </table> <pre> class Boxing1{ static void m(int i){System.out.println(&apos;int&apos;);} static void m(Integer i){System.out.println(&apos;Integer&apos;);} public static void main(String args[]){ short s=30; m(s); } } </pre> <span> Test it Now </span> <pre> Output:int </pre> <hr> <h3>2) Example of Autoboxing where widening beats varargs</h3> <table class="table"> <tr><td>If there is possibility of widening and varargs, widening beats var-args.</td></tr> </table> <pre> class Boxing2{ static void m(int i, int i2){System.out.println(&apos;int int&apos;);} static void m(Integer... i){System.out.println(&apos;Integer...&apos;);} public static void main(String args[]){ short s1=30,s2=40; m(s1,s2); } } </pre> <span> Test it Now </span> <pre> Output:int int </pre> <hr> <h3>3) Example of Autoboxing where boxing beats varargs</h3> <table class="table"> <tr><td>Let&apos;s see the program where boxing beats variable argument:</td></tr> </table> <pre> class Boxing3{ static void m(Integer i){System.out.println(&apos;Integer&apos;);} static void m(Integer... i){System.out.println(&apos;Integer...&apos;);} public static void main(String args[]){ int a=30; m(a); } } </pre> <span> Test it Now </span> <pre> Output:Integer </pre> <hr> <h3>Method overloading with Widening and Boxing</h3> <table class="table"> <tr><td>Widening and Boxing can&apos;t be performed as given below:</td></tr> </table> <pre> class Boxing4{ static void m(Long l){System.out.println(&apos;Long&apos;);} public static void main(String args[]){ int a=30; m(a); } } </pre> <span> Test it Now </span> <pre> Output:Compile Time Error </pre></100){>

Yöntem aşırı yüklemesi ile Otomatik Kutulama ve Kutudan Çıkarma

Yöntem aşırı yüklemesinde kutulama ve kutudan çıkarma işlemleri yapılabilir. Boxing ile yöntemin aşırı yüklenmesine ilişkin bazı kurallar vardır:
Genişlemek boksu yener
Genişlemek varargları yener
Boks Varargs'ı yener

1) Genişletmenin boksu yendiği Otomatik Kutulama örneği

Genişletme ve boks yapma imkanı varsa, genişletme bokstan üstündür.
 class Boxing1{ static void m(int i){System.out.println(&apos;int&apos;);} static void m(Integer i){System.out.println(&apos;Integer&apos;);} public static void main(String args[]){ short s=30; m(s); } } 
Şimdi Test Edin
 Output:int 

2) Genişletmenin varargs'ı yendiği Otomatik Kutulama örneği

Genişletme ve vararg olasılığı varsa, genişletme var-args'ı yener.
 class Boxing2{ static void m(int i, int i2){System.out.println(&apos;int int&apos;);} static void m(Integer... i){System.out.println(&apos;Integer...&apos;);} public static void main(String args[]){ short s1=30,s2=40; m(s1,s2); } } 
Şimdi Test Edin
 Output:int int 

3) Boksun varargs'ı yendiği Otomatik Kutulama örneği

Boksun değişken argümanı yendiği programı görelim:
 class Boxing3{ static void m(Integer i){System.out.println(&apos;Integer&apos;);} static void m(Integer... i){System.out.println(&apos;Integer...&apos;);} public static void main(String args[]){ int a=30; m(a); } } 
Şimdi Test Edin
 Output:Integer 

Genişletme ve Kutulama ile yöntemin aşırı yüklenmesi

Genişletme ve Kutulama aşağıda belirtildiği şekilde gerçekleştirilemez:
 class Boxing4{ static void m(Long l){System.out.println(&apos;Long&apos;);} public static void main(String args[]){ int a=30; m(a); } } 
Şimdi Test Edin
 Output:Compile Time Error