순간을 기록으로

[Java] toString() vs valueOf() 차이 본문

Development/JAVA

[Java] toString() vs valueOf() 차이

luminous13 2022. 5. 31. 15:28

안녕하세요 luminous13입니다. 오늘은 toString()과 valueOf()의 차이점에 대해 알아보겠습니다.

 

코드를 짜다보면 다른 타입에서 문자열로 형변환해야될 상황이 있습니다.

예를들어 int에서 문자열로 형변환을 하고 싶을 때 우리는 아래의 코드와 같이 2가지 방법을 사용할 수 있습니다. 

 

  public static void main(String[] args) {
    int num = 123;

    String str1 = Integer.toString(num);
    String str2 = String.valueOf(num);

    System.out.println("String() 이용: " + str1); // "123"
    System.out.println("valueOf() 이용: " + str2);// "123"
  }

두 방법 모두 숫자를 입력으로 받아 문자열을 반환합니다. 그럼 무슨 차이가 있는걸까요?

 

 

두 방법의 차이는 입력받은 객체가 null일 때 차이가 있습니다.

 

toString(Object ob)

toString의 경우 입력으로 null을 받은경우 아래의 예시처럼 NullPointException을 발생시킵니다.

예시코드

public static void main(String[] args) {
    Object obj = null;

    System.out.println(obj.toString()); // NullPointException
}

 

valueOf(Object obj)

반면 valueOf의 경우 null을 입력받은 경우 "null" 문자열을 반환합니다. 그 외에는 toString() 반환값을 리턴합니다. 다시말해서 toString()을 한번 감싼 메서드라고 보면 됩니다. 실제로 구현 코드를 보면 아래와 같이 toString()을 호출합니다.

예시코드

public static void main(String[] args) {
    Object obj = null;

    System.out.println(String.valueOf(obj));  // "null"
}

구현코드

public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
}

참고

https://stackoverflow.com/questions/27465731/string-valueof-vs-object-tostring

 

String.valueOf() vs. Object.toString()

In Java, is there any difference between String.valueOf(Object) and Object.toString()? Is there a specific code convention for these?

stackoverflow.com

 

Comments