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(): 객체 반환, 캐싱 범위 고려 필요