본문 바로가기
멀티캠퍼스 풀스택 과정/Java의 정석

자바의 정석6-4 오토박싱 & 언박싱

by 이쟝 2022. 1. 7.

오토박싱 & 언박싱

int(기본형) -> Integer(래퍼클래스:참조형): 오토박싱(Auto boxing)

Integer(래퍼클래스:참조형) -> int(기본형): 언박싱(un boxing)

 

-JDK1.5 이전에는 기본형과 참조형간의 연산이 불가능했음

 

 

컴파일러가 자동으로 래퍼클래스의 객체인 Integer를 intValue( )메서드를 사용해서 기본형으로 바꾸고 기본형 i와 더해줌(언박싱)

-> 자바의 기본원칙이 변한 게 아니라 컴파일러가 자동으로 변환해주는 기능이 추가된 것

- 기본형의 값을 객체(래퍼클래스)로 자동변환하는 것을 오토박싱, 그 반대는 언박싱

 

ArrayList<Integer> list = new ArrayList<Integer>(); // ArrayList는 객체만 저장 가능

// 아래 두 코드 동일함
//list.add(new Integer(100));  // list에는 객체만 추가가능
list.add(100);  // JDK1.5 이전에는 에러(컴파일러가 이 코드를 자동으로 위의 코드처럼 변환)

//셋다 같은 코드
//Integer i = list.get(0).intValue(); //원래는 intValue()로 Integer를 int로 변환(기본형) 
//int i = list.get(0).intValue();     //
Integer i = list.get(0);  // list에 저장된 첫번째 객체를 꺼낸다.

예제) 오토박싱&언박싱 = 기본형과 참조형 간의 자동변환

 

public class Ex9_16 {
	public static void main(String[] args) {
		int i = 10;
		
		// 기본형을 참조형으로 형변환(형변환 생략가능)
		Integer intg = (Integer)i; // Integer intg = Integer.valueOf(i);(컴파일러가 변환) 
		Object obj = (Object)i;    // Object obj = (Obejct)Integer.valueOf(i);
		
		// 기본형을 객체에다가 바로 저장 
		Long lng = 100L;   // Long lng = new Long(100L);(컴파일러가 변환)
		
		int i2 = intg + 10;   // 참조형과 기본형간의 연산가능
		long l = intg + lng;  // 참조형 간의 덧셈도 가능
		
		Integer intg2 = new Integer(20);
		int i3 = (int)intg2;   // 참조형을 기본형으로 형변환도 가능(형변환 생략가능)
	}
}

 

-> 사용불가 원칙: 기본형 -> 참조형으로 형변환 (형변환 연산자로 사용불가) -> 허용으로 바뀜(컴파일러 덕분에)

 

컴파일 전의 코드 컴파일 후의 코드
Integer intg = (Integer)i; Integer intg = Integer.valueOf(i);
Object obj = (Object)i; Object obj = (Object)Integer.valueOf(i);
Long lng = 100L; Long lng = new Long(100L);

 

 

https://everysmallstep.tistory.com/91

 

자바의 정석6-3 Math클래스, Rapper클래스, Number클래스

Math클래스 - 수학 관련 static메서드의 집합(객체를 만들 필요 xx) - Math클래스의 메서드는 모두 static이고, 아래와 같이 2개의 상수만 정의해 놓음 올림, 버림, 반올림 - 원하는 자리 수에서 반올림된

everysmallstep.tistory.com