설명
자바에서 String을 숫자 값으로 변형할 때 Integer.parseInt()와 Integer.valueOf() 메소드를 많이 활용한다. 원시데이터가 필요한 경우 parseInt()를 사용했고 객체가 필요하면 valueOf()를 사용했다.
차이점
parseInt(): 원시데이터인 int 타입을 반환
valueOf(): Integer 래퍼(wrapper) 객체를 반환
소스 코드
•
parseInt() - parseInt() 메소드는 전달받은 인자를 파싱하고 기본데이터 타입인 int로 반환한다.
public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
}
Java
복사
•
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);
}
Java
복사
위의 소스코드처럼 valueOf() 메소드는 String 을 parseInt() 메소드로 전달하고 이 메소드는 실제로 String 을 변환하는 작업 후 int 데이터를 반환한다. 그 다음 valueOf() 메소드가 호출되며, 반환 받은 int 타입이 이 메소드로 전달된다. 이 메소드내에는 -128 부터 127 범위의 Integer 들을 관리하는 풀을 사용하고 있다. 따라서 전달한 int 가 캐쉬범위내에 포함되어 있으면 객체 풀에서 Integer 를 꺼내와 반환하며, 캐쉬범위에 포함되지 않을 경우에는 새로운 객체를 생성한다.
두 메소드 중에 어느 것을 사용할지는 사용의 용도에 맞게 사용하면 된다. 기본 int 가 필요하면 parseInt() , Integer 래퍼 객체가 필요하면 valueOf() 를 사용하면 된다.