티스토리 뷰
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 객체를 필요로 할 때 사용됩니다. 예를 들어, 컬렉션에 정수를 저장하거나 객체와의 비교가 필요할 때 유용합니다.
참고
'[JAVA]' 카테고리의 다른 글
[Java] codePoint 메서드 (2) | 2024.10.16 |
---|---|
[Java] switch 표현식 (0) | 2023.03.21 |
[Java] 자바 스레드와 동시성(5) - Thread Pool (스레드풀), Executor (1) | 2022.10.10 |
[Java] 자바 스레드와 동시성(4) - join(), sleep(), yield() (0) | 2022.10.09 |
[Java] 자바 스레드와 동시성(3) - 우선 순위 (0) | 2022.10.01 |
- Total
- Today
- Yesterday
- aspectj
- Redis
- Mockito
- JPA
- 카멜 표기법
- JUnit
- Executor
- sgw
- java11
- thread priority
- jdk12
- ThreadPool
- chmod
- JetBrains Mono
- codepoint
- java
- 확인창
- JAVA8
- hot-deploy
- Jenkins
- IntelliJ
- Thread
- 파스칼 표기법
- jdk13
- junit5
- 한글깨짐
- gradle
- Visual Studio 2022
- spring
- spring-security
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |