코린이의 소소한 공부노트

문자열의 여러 가지 변환, 오토박싱, 언박싱 본문

Java

문자열의 여러 가지 변환, 오토박싱, 언박싱

무지맘 2022. 10. 11. 12:44

[문자열을 여러 가지로 변환하기]

1. 문자열을 기본형으로 변환

int i1 = Integer.parseInt("100");
int i2 = Integer.valueOf("100"); // 래퍼 클래스 변환에도 쓰임

2. 문자열을 래퍼 클래스로 변환

Integer i3 = new Integer("100").intValue();
Integer i4 = Integer.valueOf("100"); // 기본형 변환에도 쓰임

3. 래퍼 클래스를 문자열로 변환

String s = i4.toString();

4. n진법의 문자열을 숫자로 변환

int i5 = Integer.parseInt("100", 2); // 100(2) = 4
int i6 = Integer.parseInt("100", 8); // 100(8) = 64
int i7 = Integer.parseInt("100", 16); // 100(16) = 256
int i8 = Integer.parseInt("FF", 16); // FF(16) = 255
int i9 = Integer.parseInt("FF"); // Exception in thread "main" java.lang.NumberFormatException
// 진수를 생략하면 10진수로 간주하는데
// 10진수에 F라는 수는 없기 때문에 에러 발생

 

[오토박싱, 언박싱]

- 오토박싱은 기본형을 래퍼 클래스로 변환하는 것을 말하고

- 언박싱은 래퍼 클래스를 기본형으로 변환하는 것을 말한다.

- 둘 다 컴파일러가 자동으로 변환해준다.

((예제1)) 기본형과 참조형의 연산

int i1 = 5;
Integer i2 = new Integer(8);
int sum = i1 + i2;
// jdk1.5 이전: error -> 기본형과 참조형간의 연산 불가능
// jdk1.5 이후: sum = 13 -> 컴파일러가 아래처럼 코드를 바꿔주기 때문에
int sum = i1 + i2.intValue();

((예제2)) ArrayList

ArrayList에는 원래 객체만 저장 가능한데, 컴파일러가 알아서 변환해준다. 그래서 우리가 실제 사용할 때는 주석 처리되지 않은 3줄만 써도 충분하다.

ArrayList<Integer> list = new ArrayList<Integer>();

// 1) 리스트에 100 추가
// list.add(new Integer(100)); // 오토박싱을 해주기 때문에 이렇게 안 해도 된다.
list.add(100);

// 2) 리스트의 첫 번째 값 반환
// Integer i1 = list.get(0); // list의 첫 번째 객체 반환
// 기본형으로 반환 받으려면?
// int i2 = list.get(0).intValue(); // 언박싱을 해주기 때문에 이렇게 안 해도 된다.
int i2 = list.get(0);

((예제3)) 형변환

기본형을 참조형으로 형변환할 때 형변환 연산자를 사용하지 못하는 게 원칙인데, 이를 허용해준 것이 오토박싱이다.

// 기본형을 참조형으로 형변환(형변환 생략 가능)
int i = 100;
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);

Integer intg2 = new Integer(100);
int i3 = (int)intg2;  // 참조형을 기본형으로 형변환도 가능(형변환 생략 가능)

 

'Java' 카테고리의 다른 글

형식화 클래스  (0) 2022.10.21
캘린더 클래스  (0) 2022.10.12
래퍼 클래스, 넘버 클래스  (0) 2022.10.11
StringBuilder 클래스  (0) 2022.08.24
Math 클래스  (0) 2022.08.24