Integer.parseInt() & Integer.valueOf()

태로미·2023년 9월 11일
0

JAVA

목록 보기
2/3
post-thumbnail




✍🏻개요


JAVA에서 String을 숫자 값으로 변형할 때
Integer.parseInt() 또는 Integer.valueOf() 메서드를 많이 활용하는데,
이 두 메서드의 정확한 차이점은 뭘까?🤔







📌차이점


개념

parseInt()valueOf()
원시데이터인 int 타입을 반환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를 꺼내와 반환, 캐쉬범위에 포함되지 않을 경우에는 새로운 객체를 생성함.






💭마무리


메서드 명만 언뜻 보기에는 비슷해 보였으므로 그 차이가 궁금해서 알아보고
그 차이를 포스팅해보았는데,,,이거 완전히 다른 메서드였네? ㅎㅅㅎa...
기본 int가 필요하면 parseInt() , 래퍼 객체 Intege가 필요하면 valueOf() 사용.
무궁무진한 메서드의 세계 ~.~







profile
Here And Now

0개의 댓글