logo

오토박싱 및 언박싱:

기본 데이터 유형을 동등한 래퍼 유형으로 자동 변환하는 것을 박싱(boxing)이라고 하며 반대 작업을 박싱 해제(unboxing)라고 합니다. 이것은 Java5의 새로운 기능입니다. 따라서 자바 프로그래머는 변환 코드를 작성할 필요가 없습니다.

Autoboxing 및 Unboxing의 장점:

프리미티브와 래퍼 사이를 수동으로 변환할 필요가 없으므로 코딩이 덜 필요합니다.

Java의 Autoboxing에 대한 간단한 예:

 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); } } 
지금 테스트해보세요
 Output:50 5 
이 예제를 다운로드하세요

자바 언박싱의 간단한 예:

래퍼 클래스 유형을 해당 기본 유형으로 자동 변환하는 것을 Unboxing이라고 합니다. 언박싱의 예를 살펴보겠습니다.

 class UnboxingExample1{ public static void main(String args[]){ Integer i=new Integer(50); int a=i; System.out.println(a); } } 
지금 테스트해보세요

산출:

 50 

비교 연산자를 사용한 Autoboxing 및 Unboxing

비교 연산자를 사용하여 오토박싱을 수행할 수 있습니다. 비교 연산자를 사용한 박싱의 예를 살펴보겠습니다.
 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){>

메서드 오버로딩을 사용한 Autoboxing 및 Unboxing

메소드 오버로딩에서는 boxing과 unboxing을 수행할 수 있습니다. 박싱을 통한 메서드 오버로딩에는 몇 가지 규칙이 있습니다.
비트 복싱 확대
확장이 varargs를 능가함
권투는 varargs를 이긴다

1) 넓히는 것이 복싱을 이긴 오토박싱의 예

넓히기와 복싱의 가능성이 있다면 넓히는 것이 복싱을 이긴다.
 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); } } 
지금 테스트해보세요
 Output:int 

2) 확장이 varargs를 능가하는 Autoboxing의 예

확대 및 varargs 가능성이 있는 경우 확대가 var-args보다 우선합니다.
 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); } } 
지금 테스트해보세요
 Output:int int 

3) boxing이 varargs를 이기는 Autoboxing의 예

권투가 가변 인수를 이기는 프로그램을 살펴보겠습니다.
 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); } } 
지금 테스트해보세요
 Output:Integer 

확대 및 박싱을 사용한 메서드 오버로딩

아래와 같이 Widening 및 Boxing을 수행할 수 없습니다.
 class Boxing4{ static void m(Long l){System.out.println(&apos;Long&apos;);} public static void main(String args[]){ int a=30; m(a); } } 
지금 테스트해보세요
 Output:Compile Time Error