티스토리 뷰

반응형

 

Java에서 String을 int와 Integer로 변환하는 방법

Java에서 문자열을 숫자로 변환하는 경우가 많습니다.

이 글에서는 Integer.parseInt()Integer.valueOf()의 차이, 캐싱 범위, 객체 비교 방법까지 상세히 설명합니다.

 

1. String을 int로 변환 (Integer.parseInt)

Integer.parseInt() 메서드를 사용하면 문자열을 기본형 int로 변환할 수 있습니다.

String str = "123";
int num = Integer.parseInt(str);

 

이 코드는 "123"이라는 문자열을 int로 변환하여 num에 저장합니다.

만약 입력 문자열이 숫자가 아니라면 NumberFormatException이 발생할 수 있으므로 유효성 검사를 추천합니다.

 

2. String을 Integer로 변환 (Integer.valueOf)

Integer.valueOf() 메서드는 문자열을 Integer 객체로 변환합니다.

String str = "123";
Integer num = Integer.valueOf(str);

 

이 방식은 Integer 객체를 반환하므로 equals() 같은 메서드를 사용할 수 있으며,

int보다 객체 중심의 연산이 가능합니다.

 

3. Integer.valueOf()의 캐싱 범위

Java에서 Integer.valueOf()는 -128부터 127까지의 값을 캐시합니다.

이 범위 내의 숫자는 객체를 새로 생성하지 않고 기존 객체를 재사용합니다.

Integer integer1 = Integer.valueOf(100);
Integer integer2 = Integer.valueOf(100);
System.out.println(integer1 == integer2);  // true

100은 캐시 범위 내이므로 두 객체는 동일한 메모리 주소를 참조하여 true를 반환합니다.

반대로 200은 캐싱 범위를 벗어나므로 아래와 같은 결과가 나옵니다:

 

Integer integer3 = Integer.valueOf(200);
Integer integer4 = Integer.valueOf(200);
System.out.println(integer3 == integer4);  // false

 

4. Integer 객체 비교: == vs equals()

== 연산자는 메모리 주소(참조)를 비교하고, equals() 메서드는 값 자체를 비교합니다.

Integer integer3 = Integer.valueOf(200);
Integer integer4 = Integer.valueOf(200);
System.out.println(integer3 == integer4);           // false
System.out.println(integer3.equals(integer4));      // true

200은 캐싱 범위 밖의 값이므로 ==는 false, equals()는 true가 반환됩니다.

객체 비교 시에는 항상 equals() 사용을 권장합니다.

 

5. 변환 시 주의할 점

  • NumberFormatException: 변환 대상 문자열이 숫자 형식이 아닌 경우 발생
  • Integer.parseInt(): 기본형 int를 반환 (캐싱 없음)
  • Integer.valueOf(): 객체 반환, 캐싱 범위 고려 필요