[Java] String.valueOf() 와 Integer.toString() 의 차이

김하밍·2024년 2월 3일
0

Java

목록 보기
24/46

🤲 toString() 메서드는 int타입의 숫자를 매개변수로 받아서 문자열로 반환해주는 함수입니다. 고로 Integer.toString() 은 정수값을 매개변수로 사용하는 정적 메서드이며 Integer 클래스 내부에 있는 메서드 입니다.

🤲 valueOf() 메서드는 String 클래스 내부에 있는 메서드이며, 매개변수를 받아서 문자열 표현으로 반환합니다. String 클래스 내부에 있는 메서드 입니다.

Java에서 정수를 문자열로 변경할 때, 일반적으로 위 두 메서드를 이용할 수 있으며, 위 메서드들은 변환하는 정수 타입이 int(Primitive type) 인지, Integer(Wrapper class) 인지에 따라 약간의 차이가 발생합니다.


☀️ int (Primitive type)
기본적으로 int를 사용할 때는, 두 메서드는 완벽히 동일한 동작을 하게 됩니다.
그 이유는 String 클래스의 valueOf() 메서드 자체가 Integer.toString() 메서드를 사용하고 있기 때문입니다.

☀️ Integer (Wrapper class)
Wrapper class 인 Integer 같은 경우에, null이 아닌 값을 사용할 때에는 String.valueOf() 메서드와 Integer.toString() 메서드 모두 기본형인 int의 결과가 같은 결과를 제공합니다.

하지만, Integer의 값이 null일 경우에는

Integer wrapper = null;
String valueOf = String.valueOf(wrapper);
System.out.println(valueOf);

String toString = Integer.toString(wrapper);
System.out.println(toString);

위와 같은 경우, String.valueOf()의 경우에는 값이 잘 나오지만,
Integer.toString() 메서드에서 NullPointerException을 던집니다.

null 일 때, 이런 결과가 나오는 이유는
Integer의 toString()메서드와 int의 toString() 메서드가 같은 메서드를 호출하고 있고, 이 메서드는 Wrapper클래스인 Integer가 아닌 int를 인자로 받고 있기 때문에 발생하는 것 입니다.

그러면, String.valueOf() 에서는 왜 에러가 나지 않고 출력이 나왔을까요?

그 이유는 String.valueOf의 경우 Wrapper클래스에서 오버라이딩을 하게 되면 기본형에서 오버라이딩한 메서드와는 다른 Object를 인자로 받는 메서드를 오버라이딩하기 때문에 호출 결과가 조금 다르게 동작하게 되는 것 입니다.

int의 valueOf() 와는 다르게 Wrapper class가 null일 경우를 처리해주는 것을 알 수 있습니다.
따라서 NPE를 던지지 않고 null을 잘 출력하게 됩니다.

profile
나만의 언어로 기록하며 성장하기 !

0개의 댓글