여러분 모두 한번쯤 코딩 테스트 문제 풀이를 통해서 int 형을 String 형으로 바꿔야 할 때가 많았을 겁니다.
이때 사용되는 두 메서드가 있는데 두 메서드의 차이가 뭘까라는 생각을 하셨을텐데요.

두 메서드의 차이점에 대해 알아보도록 하겠습니다.

살펴보면 코드가 어려워 보이지만 단순히 위의 메서드를 통해서 새로운 String을 생성해 반환해 주는걸 볼 수 있습니다.

놀랍게도 String.valueOf()가 Integer의 toString() 메서드를 오버라이딩하고 있는걸 확인할 수 있습니다.
그러면 같은 메서드를 호출하니 같게 동작하는구나라고 생각하실 수 있는데 예외 사항들이 존재합니다.
어떤 예외 사항이 있는지 찾아 보겠습니다.
만약 변경할 변수의 정수 타입이 int형 (Primitive type) 일 때는 두 메서드의 동작이 동일하게 동작합니다.
※ 하지만 만약 변경하려는 변수의 정수 타입이 Integer(Wrapper class)일때 문제가 발생합니다.
int형(Primitive)은 null 값일 수 없기때문에 문제가 생기지 않지만
Integer(Wrapper) 같은경우에는 null 값을 가질 수 있습니다.
눈썰미 좋으신 분은 위에 String.valueOf() 메서드 사진에서 Integer.toString()과의 다른 점을 찾으셨을 겁니다
바로 @NotNull 에노테이션을 받고 있다는 겁니다.
그래서 주어진 정수가 int 타입에서는 값이 null 일 수 없기때문에 두 메서드에 차이가 없습니다.
But.
Integer 객체가 null이면 Integer.toString()은 NullPointerException 예외를 throw 하게 되지만,
String.valueOf() 는 String.valueOf(Object obj) 메서드가 호출되어 null 을 반환 하기 때문에 예외를 throw하지 않는
차이가 있습니다.
결론