자바의 정석 - 오토박싱 & 언박싱, 문자열과 숫자변환

Yohan·2024년 2월 6일
0
post-custom-banner

문자열을 숫자로 변환하기

  • 문자열을 숫자로 변환하는 다양한 방법
// 첫 번째
int i = new Integer("100").intValue(); // floatValue(), longValue() ...
									   // 래퍼클래스 -> 기본형

// 두 번째
int i2 = new Integer.parseInt("100"); // 많이 사용. parseByte, parseShort ...

// 세 번째
int(Integer 가능) i3 = new Integer.valueOf("100"); // Byte.valueOf, Short.valueOf ..
  • n진법의 문자열을 숫자로 변환하는 방법 (2, 8, 16 ..)
int i = Integer.parseInt("100", 2); // 2진법, 100(2) -> 4
int i = Integer.parseInt("100", 8); // 8진법, 100(8) -> 64

예제

public class Ex1 {
	public static void main(String[] args) {

		System.out.println("i= "+Integer.parseInt("100"));
		System.out.println("i= "+Integer.parseInt("100",10)); // 위와 동일
		System.out.println("i= "+Integer.parseInt("100",2)); // 2진수
		System.out.println("i= "+Integer.parseInt("FF",16)); // 16진수
	}
}

오토박싱 & 언박싱

  • int -> Integer처럼 기본형 -> 래퍼클래스 로 자동으로 바꿔주는 것을 오토박싱
  • 반대로 래퍼클래스 -> 기본형 로 바꿔주는 것은 언박싱
  • JDK 1.5 이전에는 기본형과 참조형간의 연산 불가능
int i = 5;
Integer iObj = new Integer(7);

int sum = i + iObj; // 에러
  • JDK 1.5 이후
int i = 5;
Integer iObj = new Integer(7);

int sum = i + iObj.intValue(); // 래퍼클래스 -> 기본형
							   // 알아서 변환시켜줌 (언박싱)
  • 기본형의 값을 객체로 자동변환하는 것을 오토박싱, 그 반대는 언박싱
// ArrayList에는 객체만 저장가능하지만 기본형으로 코드를 입력해도 자동변환해주기 때문에 입력가능
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(10);            // 오토박싱, 10 -> new Integer(10)

int value = list.get(0); // 언박싱, new Integer(10) -> 10

오토박싱 & 언박싱 예제1

public class Ex1 {
	public static void main(String[] args) {
		ArrayList<Integer> list = new ArrayList<Integer>();
		list.add(new Integer(100)); // list에는 객체만 추가가능
		list.add(100); // JDK 1.5 이전에는 에러
		
		// Integer i = list.get(0); // list에 저장된 첫번째 객체를 꺼낸다.
		int i = list.get(0).intValue(); // intValue()로 Integer -> int로 변환 (타입이 int이므로 변환해줘야됨)
		int i = list.get(0); // intValue() 없어도 Ok
	}
}

오토박싱 & 언박싱 예제2

public class Ex1 {
	public static void main(String[] args) {
		int i = 10;
		
		// 기본형 -> 참조형으로 형변환 가능
		Integer intg = (Integer)i;
		Object obj = (Object)i; 
		
		Long lng = 100L;
		
		int i2 = intg + 10; // 참조형과 기본형의 연산 가능
		long l = intg + lng; // 참조형 간의 덧셈 가능
		
		Integer intg2 = new Integer(20);
		int i3 = (int)intg2; // 참조형 -> 기본형으로 형변환도 가능
	}
}

정리

  • 기본형, 래퍼클래스를 동일한 타입이라고 생각하고 사용가능
    -> 왜? JDK 1.5 이후부터는 자동으로 컴파일과정에서 변환시켜주기 때문! (오토박싱 & 언박싱)
profile
백엔드 개발자
post-custom-banner

0개의 댓글