오토박싱 & 언박싱
int(기본형) -> Integer(래퍼클래스:참조형): 오토박싱(Auto boxing)
Integer(래퍼클래스:참조형) -> int(기본형): 언박싱(un boxing)
컴파일러가 자동으로 래퍼클래스의 객체인 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
'멀티캠퍼스 풀스택 과정 > Java의 정석' 카테고리의 다른 글
자바의 정석7-2 형식화 클래스(DecimalFormat,SimpleDateFormat) (0) | 2022.01.08 |
---|---|
자바의 정석7-1 날짜와 시간클래스(Calendar, Date) (0) | 2022.01.08 |
자바의 정석6-3 Math클래스, Rapper클래스, Number클래스 (0) | 2022.01.07 |
자바의 정석6-2 String 클래스, Stringbuffer(StringBuilder) (0) | 2022.01.07 |
자바의 정석6-1 Java.lang패키지, eqauls, hasecode, toString (0) | 2022.01.07 |