1. 개요
아시다시피 int 에서 String 으로의 변환은 Java에서 매우 일반적인 작업입니다.
이 짧은 예제에서는 이 변환에 도움이 되는 Integer 클래스 의 toString() 과 String 클래스 의 valueOf() 라는 두 가지 매우 인기 있는 메서드 를 살펴보겠습니다 . 또한 더 잘 이해하기 위해 이 두 가지 방법을 사용하는 몇 가지 사항과 예를 살펴보겠습니다.
2. Integer.toString() 메서드
이 메서드 는 기본 데이터 형식 int 의 정수를 매개 변수로 받아들이고 지정된 정수를 나타내는 String 개체를 반환합니다 .
서명을 살펴보겠습니다.
public static String toString(int i)
이제 정수에서 문자열로의 변환이 발생하는 것을 이해하기 위해 부호 있는/부호 없는 정수를 매개 변수로 전달하는 몇 가지 예를 살펴보겠습니다.
@Test
public void whenValidIntIsPassed_thenShouldConvertToString() {
assertEquals("11", Integer.toString(11));
assertEquals("11", Integer.toString(+11));
assertEquals("-11", Integer.toString(-11));
}
3. String.valueOf() 메서드
이 메서드는 또한 기본 데이터 형식 int 의 정수를 매개 변수로 받아들이고 String 개체 를 반환 합니다. 흥미롭게도 반환된 문자열 표현은 Integer.toString(int i) 메서드 에서 반환된 것과 정확히 동일합니다 . 내부적으로 Integer.toString() 메서드를 사용하기 때문입니다.
java.lang.String 클래스 에 제공된 내부 구현을 살펴보겠습니다 .
/**
* Returns the string representation of the {@code int} argument.
* <p>
* The representation is exactly the one returned by the
* {@code Integer.toString} method of one argument.
*
* @param i an {@code int}.
* @return a string representation of the {@code int} argument.
* @see java.lang.Integer#toString(int, int)
*/
public static String valueOf(int i) {
return Integer.toString(i);
}
더 잘 이해하기 위해 정수에서 문자열로의 변환이 발생하는 것을 이해하기 위해 부호 있는/부호 없는 정수를 매개 변수로 전달하는 몇 가지 예를 볼 수 있습니다.
@Test
public void whenValidIntIsPassed_thenShouldConvertToValidString() {
assertEquals("11", String.valueOf(11));
assertEquals("11", String.valueOf(+11));
assertEquals("-11", String.valueOf(-11));
}
4. 정수의 차이점. toString() 및 문자열. 값의()
요약하면 이 두 가지 방법 사이에 실제적인 차이점은 없지만 혼동을 피하기 위해 다음 사항을 이해해야 합니다.
내부적으로 동일한 Integer.toString() 메서드 를 사용하기 때문에 String.valueOf() 메서드 를 사용할 때 스택 추적에 하나의 추가 호출이 있습니다 .
null 개체를 valueOf() 메서드 에 전달할 때 약간의 혼란이 있을 수 있습니다 . 기본 int 를 valueOf() 메서드에 전달할 때 동일하게 보이지만 실제 메서드 호출은 다른 오버로드된 메서드로 이동하기 때문입니다.
Integer.toString() 은 주어진 Integer 객체가 null 인 경우 NullPointerException 을 던질 수 있습니다 . String.valueOf() 는 String.valueOf(Object obj) 메서드 로 이동하여 null 을 반환 하기 때문에 예외를 throw하지 않습니다. String.valueOf(int i) 에 전달된 기본 int 는 null 이 될 수 없지만 다른 메서드 String.valueOf(Object obj) 가 있으므로 오버로드된 두 메서드 사이에서 혼동될 수 있습니다.
다음 예를 통해 마지막 요점을 이해해 봅시다.
@Test(expected = NullPointerException.class)
public void whenNullIntegerObjectIsPassed_thenShouldThrowException() {
Integer i = null;
System.out.println(String.valueOf(i));
System.out.println(i.toString());
}
기본 int 는 null 이 될 수 없으며 , 그 아래의 메서드에서 예외가 발생하는 경우 이를 확인하고 있습니다.
5. JVM 메소드 인라인이 String.valueOf() 메소드 에 미치는 영향
앞에서 설명한 것처럼 String.valueOf() 메서드에는 추가 호출이 포함됩니다. 그러나 JVM은 메서드 인라인을 통해 스택 추적에서 추가 호출까지 제거할 수 있습니다.
그러나 이것은 전적으로 JVM이 해당 메소드를 인라인으로 선택하는지 여부에 달려 있습니다. 자세한 설명 은 JVM의 메서드 인라인에 대한 기사를 참조하십시오.
6. 결론
이번 글에서는 Integer에 대해 알아보았습니다. toString() 및 문자열. valueOf() 메소드. 또한 프로그래밍하는 동안 혼란을 피하기 위해 집중해야 할 몇 가지 사항을 살펴보았습니다.
항상 그렇듯이 이 기사의 전체 코드 샘플은 GitHub 에서 찾을 수 있습니다 .