CodeGym /Java Blog /무작위의 /Java의 오토박싱 및 언박싱
John Squirrels
레벨 41
San Francisco

Java의 오토박싱 및 언박싱

무작위의 그룹에 게시되었습니다
Java에서 프리미티브와 해당 래퍼의 기능은 자동박싱/언박싱입니다. 이 개념을 파헤쳐 보겠습니다. 우리가 이미 배웠듯이 Java는 객체지향 언어입니다. 즉, Java로 작성된 모든 프로그램은 객체로 구성됩니다. 프리미티브는 객체가 아닙니다. 그러나 그렇더라도 래퍼 변수에 기본 값이 할당될 수 있습니다. 이 프로세스를 오토박싱이라고 합니다. 마찬가지로 기본 변수에 래퍼 개체가 할당될 수 있습니다. 이 과정을 언박싱이라고 합니다. 예를 들어:
public class Main {
   public static void main(String[] args) {
       int x = 7;
       Integer y = 111;
       x = y; // Unboxing
       y = x * 123; // Autoboxing
   }
}
5번째 줄에서는 Integer 객체 인 y를 기본 x 에 할당합니다 . 보시다시피 추가 단계를 수행할 필요가 없습니다. 컴파일러는 intInteger가 본질적으로 동일하다는 것을 알고 있습니다. 언박싱입니다. 6행의 오토박싱에서도 비슷한 일이 발생합니다. 기본 값(x * 123)은 객체 y 에 쉽게 할당됩니다 . 이것은 오토박싱의 예입니다. 이것이 용어에 "auto"라는 단어가 포함된 이유입니다. 해당 래퍼 객체에 프리미티브를 할당하기 위해 특별한 작업을 수행할 필요가 없기 때문입니다(그 반대의 경우도 마찬가지). 모든 일이 자동으로 발생합니다. 편리하지 않나요? :) 메소드 작업 시 오토박싱/언박싱의 편의성에 대한 또 다른 예를 살펴보겠습니다. 이는 메서드 인수도 자동으로 박싱되고 박싱되지 않기 때문입니다. 예를 들어 메소드가 두 개의 Integer 객체를 입력으로 사용하는 경우 대신 일반 int 를 쉽게 전달할 수 있습니다 !
public class Main {
   public static void main(String[] args) {

       printNumber(7);// A standard int, not even an int variable
   }

   public static void printNumber(Integer i) {
       System.out.println("You entered the number " + i);
   }
}
산출:
You entered the number 7
다른 방향으로도 작동합니다.
public class Main {
   public static void main(String[] args) {

       printNumber(new Integer(632));
   }

   public static void printNumber(int i) {
       System.out.println("You entered the number " + i);
   }
}
기억해야 할 중요한 점은 autoboxing과 unboxing이 배열에서는 작동하지 않는다는 것입니다!
public class Main {
   public static void main(String[] args) {

       int[] i = {1,2,3,4,5};

       printArray(i);// Error, this won't compile!
   }

   public static void printArray(Integer[] arr) {
       System.out.println(Arrays.toString(arr));
   }
}
객체 배열을 사용하는 메서드에 기본 형식 배열을 전달하려고 하면 컴파일 오류가 발생합니다. 결론적으로, 프리미티브와 래퍼를 다시 한 번 간략하게 비교해 보겠습니다.

기초 요소:

  • 성능상의 이점이 있습니다.
래퍼:
  • 숫자, 문자 및 부울 값이 이 개념을 위반하지 않는다는 의미인 "모든 것이 객체입니다" 원칙을 위반하지 않도록 허용합니다.
  • 편리한 방법과 필드를 제공하여 이러한 값으로 작업할 수 있는 가능성을 확장합니다.
  • 메소드가 객체에만 작동하는 경우 필요합니다.
배운 내용을 강화하려면 Java 과정의 비디오 강의를 시청하는 것이 좋습니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION