티스토리 뷰

반응형

Integer.parseInt()

1. parseInt(String s)

전달 받은 문자열을 10진수 int로 파싱합니다.

  • Parameters:

s - 파싱할 문자열

  • Returns:

전달 받은 문자열을 10진수로 표현한 int 값.

  • Throws:

NumberFormatException - String에 파싱 가능한 int가 없는 경우.

  • 예시
@Test
void parseInt() {
    int value1 = Integer.parseInt("123");
    System.out.println(value1);     // 123
}

2. parseInt(String s,int radix)

전달받은 문자열 s를, 두번째 인수에 지정된 기수(radix)를 사용하여 int로 파싱합니다.

예를 들어, 문자열 "101"을 2진수(radix 2)로 해석하면 십진수 값 5로 변환됩니다.

  • Parameters:

s - 파싱할 문자열

radix - s를 파싱하는 동안 사용할 기수

  • Returns:

지정된 기수(radix)에서 문자열 인수로 표현한 정수

  • Throws:

NumberFormatException - String에 파싱 가능한 int가 없는 경우.

NumberFormatException 예외가 발생될 수 있는 상황

  • 인수 s의 값이 null이거나 길이가 0 일 경우
  • 진수가 Character.MIN_RADIX(=2)보다 작거나 Character.MAX_RADIX(=36)보다 클 경우
  • 인수 s의 모든 문자들이 지정된 진수에서 사용 가능한 숫자가 아닌 경우
    • Character.digit(char, int) 메서드가 0 이상의 값을 반환하는 경우, 해당 문자는 지정된 진수의 유효한 숫자로 간주
    • 단, 문자열이 길이가 1보다 긴 경우 첫 번째 문자는 빼기 기호 '-'('\u002D') 또는 더하기 기호 '+'('\u002B')가 될 수 있습니다.
    • 예를 들어, 16진수(기수 16)를 사용한다면, 사용 가능한 숫자는 0부터 9, 그리고 A부터 F까지 입니다.
  • 인수 s의 값이 int 유형이 아닌 경우
  • 예시
@Test
void parseInt() {
    int value1 = Integer.parseInt("101", 2);
    int value2 = Integer.parseInt("A3", 16);
    int value3 = Integer.parseInt("-10", 10);
    System.out.println(value1);     // 5
    System.out.println(value2);     // 163
    System.out.println(value3);     // -10
}

3. parseInt(CharSequence s,int beginIndex,int endIndex,int radix)

전달받은 CharSequence를 지정된 범위 내에서 지정된 기수(radix)를 사용하여 int로 파싱

beginIndex와 endIndex로 변환할 범위를 지정

  • Parameters

s: 파싱할 문자 시퀀스(CharSequence). String, StringBuilder, StringBuffer 등과 같은 CharSequence를 상속 받은 구현체 들이 들어 갈 수 있습니다.

beginIndex: 파싱을 시작할 위치

endIndex: 파싱을 끝낼 위치의 바로 다음 인덱스. (endIndex - 1까지 파싱된)

radix: s를 파싱하는 동안 사용할 기수

  • Returns

지정된 범위에서 주어진 기수로 표현된 정수 값을 반환합니다.

  • Throws

NullPointerException - s가 null인 경우.

IndexOutOfBoundsException - beginIndex가 음수이거나 beginIndex가 endIndex보다 크거나 endIndex가 s.length()보다 큰 경우.

NumberFormatException

  • 주어진 범위 내의 문자열이 유효한 정수를 나타내지 않는 경우.
  • radix가 2보다 작거나 36보다 큰 경우.
  • beginIndex와 endIndex가 유효한 범위가 아닌 경우.

주의사항

이 메서드는 파싱 중에 CharSequence가 변경될 위험을 방지하지 않습니다. 즉, 파싱을 하는 동안 원래의 CharSequence가 변경되면 예기치 않은 결과가 발생할 수 있습니다.

예시:

@Test
void parseInt() {
    // 인덱스 1부터 4까지의 범위(`"234"` 부분)를 10진수로 변환
    int value = Integer.parseInt("12345", 1, 4, 10);
    System.out.println(value);      //234
}

Integer.valueOf()

1. valueOf(String s)

전달 받은 문자열을 10진수 Integer 객체로 파싱합니다.

parseInt(String s, int radix) 메서드를 이용해 문자열을 파싱한 후, 그 결과를 Integer 객체로 감싸서 반환하는 방식입니다.

public static Integer valueOf(String s) throws NumberFormatException {
    return Integer.valueOf(parseInt(s, 10));
}
  • Parameters

s: 파싱할 문자열로, 십진수 정수 표현을 포함하고 있어야 합니다.

  • Returns

전달 받은 문자열을 10진수로 표현한 Integer 객체

  • Throws

NumberFormatException - 문자열 s가 파싱 가능한 정수 값을 포함하지 않는 경우

  • 예시
  • @Test void valueOf() {    Integer value1 = Integer.valueOf("123");    Integer value2 = Integer.valueOf("-45");    System.out.println(value1);     // 123    System.out.println(value2);     // -45 }

2. valueOf(String s,int radix)

전달받은 문자열 s를, 두번째 인수에 지정된 기수(radix)를 사용하여 Integer 객체로 파싱합니다.

parseInt(String s, int radix) 메서드를 이용해 문자열을 파싱한 후, 그 결과를 Integer 객체로 감싸서 반환하는 방식입니다.

public static Integer valueOf(String s, int radix) throws NumberFormatException {
    return Integer.valueOf(parseInt(s,radix));
}
  • Parameters

s - 파싱할 문자열

radix - s를 파싱하는 동안 사용할 기수

  • Returns

**지정된 기수(radix)**에서 문자열 인수로 표현한 Integer 객체

  • Throws

NumberFormatException

  • 문자열 s가 파싱 가능한 정수 값을 포함하지 않는 경우
  • radix가 2보다 작거나 36보다 큰 경우
  • 예시
@Test
void valueOf() {
    Integer value1 = Integer.valueOf("101", 2);
    Integer value2 = Integer.valueOf("FF", 16);

    System.out.println(value1);     // 5
    System.out.println(value2);     // 255
}

3. valueOf(int i)

전달받은 CharSequence를 지정된 범위 내에서 지정된 기수(radix)를 사용하여 Integer 객체로 파싱

valueOf(int i) 메서드는 주어진 정수 값 i를 Integer 객체로 감싸서 반환합니다.

public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

이 메서드는 자주 요청되는 값들을 캐싱하여 성능을 개선합니다. 캐싱되는 값의 범위는 -128에서 127까지로, 이 범위 내의 값들은 항상 캐싱되어 재사용됩니다.

  • 128에서 127 사이의 값은 미리 생성된 Integer 객체가 캐싱되기 때문에, 동일한 값에 대해 항상 동일한 객체를 반환합니다. 이 외의 범위의 값들도 캐싱될 수는 있지만(ex. JVM 옵션 : -XX:AutoBoxCacheMax=200), 캐싱이 보장되지는 않습니다.
  • Parameters

i: Integer 객체로 변환할 int 값

  • Returns

주어진 int 값 i를 나타내는 Integer 객체

  • 예시
@Test
void valueOf() {
    Integer value1 = Integer.valueOf(42);
    System.out.println(value1); // 42

    // -128에서 127 사이의 범위에서는 동일한 객체를 참조
    Integer a = Integer.valueOf(127);
    Integer b = Integer.valueOf(127);
    System.out.println(a == b); // true

    Integer c = Integer.valueOf(128);
    Integer d = Integer.valueOf(128);
    System.out.println(c == d); // false
}

parseInt와 valueOf의 차이

1. 반환 타입:

  • Integer.parseInt()는 기본 자료형 int를 반환합니다.
  • Integer.valueOf()는 Integer 객체를 반환합니다.

2. 캐싱:

  • Integer.valueOf()는 -128에서 127 범위의 값을 캐싱하여 성능을 향상시킵니다.
  • Integer.parseInt()는 캐싱을 사용하지 않고 항상 새로운 기본형 int 값을 반환합니다.

3. 사용 목적:

  • Integer.parseInt()는 원시(primitive) 타입의 int 값을 필요로 할 때 사용됩니다.
  • Integer.valueOf()는 Integer 객체를 필요로 할 때 사용됩니다. 예를 들어, 컬렉션에 정수를 저장하거나 객체와의 비교가 필요할 때 유용합니다.

참고

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함