봉봉의 개인 블로그
2019-07-19 [카테고리 미분류](parseInt vs valueOf) 본문
Integer.parseInt() vs Integer.valueOf() 차이
Integer.parseInt() 와 Integer.valueOf() 의 주요 차이점은 아래와 같다.
- parseInt() : 원시데이터인 int 타입을 변환
- valueOf() : Integer 래퍼(wrapper)객체를 반환
Java 1.5 에서 Autoboxing and Unboxing in Java 가 도입된 이후로 차이는 거의 없을 거라고 관련 자료에서 말하고 있으며, 또한 이 두 메소드는 대부분의 기본 숫자 데이터 타입 래퍼 클래스들인 Integer, Long, Double, Float 등과 같은 클래스 안에 포함되어 있을 거라고 한다.
parseInt() 소스는 아래와 같다.
public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
}
parseInt() 메소드는 전달받은 인자를 파싱하고 기본데이터 타입인 int 로 반환한다.
valueOf() 소스는 아래와 같다.
public static Integer valueOf(String s, int radix) throws NumberFormatException {
return Integer.valueOf(parseInt(s,radix));
}
public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}
위의 소스코드처럼 valueOf() 메소드는 String을 parseInt() 메소드로 전달하고 이 메소드는 실제로 String 을 변환하는 작업후 int 데이터를 반환한다. 그 다음 valueOf() 메소드가 호출되며, 반환받은 int 타입이 이 메소드로 전달된다. 이 메소드내에는 -128부터 127 범위의 integer 들을 관리하는 풀을 사용하고 있다 따라서 전달한 int가 캐쉬 범위 내에 포함되어 있으면 객체 출에서 Integer를 꺼내와 반환하며, 캐쉬 범위에 포함되지 않을 경우에는 새로운 객체를 생성한다.
-출처
Comments