JAVA 문자열 변환 toString 과 valueOf 차이점

자바에서 문자열이 아닌 데이터 타입의 값을 문자열을 변경하는 경우가 많습니다.

문자열로 변경하는 경우 toString 또는 String클래스valueOf를 사용합니다.

두 메서드는 값을 문자열로 변환해 주지만 조금 차이가 있습니다.

두 메서드의 차이를 확인해보겠습니다.

 

toString과 valueOf 차이

먼저 어떠한 차이가 있는지 내용을 보겠습니다.

String.valueOf – 파라미터가 null이면 문자열 “null”을 반환.
toString – 대상 값이 null이면 NullPointerException 오류 발생.

 

가장 큰 차이점으로 변환하려는 값이 null인 경우입니다.

String.valueOf를 사용 하는 경우에는 변환하는 값이 null 인 경우에 문자열 null 반환합니다.

샘플을 보겠습니다.

public class Program
{
    public static void main(String[] args) {

        Object intobj = 123;

        // String "123" 반환
        System.out.println(String.valueOf(intobj)); 


        Object obj = null; 

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

	}
}

 

결과

123
null

 

특별한 에러가 발생하지 않고 있는 그대로 값을 문자열로 변환되었습니다.

만약 toString을 사용해 변환을 하게 되면 에러가 발생합니다.

샘플을 보겠습니다.

public class Program
{
    public static void main(String[] args) {

        Object intobj = 123;

        // String "123" 반환
        System.out.println(intobj.toString()); 


        Object obj = null; 

        // NullPointerException 발생
        System.out.println(obj.toString()); 

	}
}

 

결과

123


Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Object.toString()" because "<local2>" is null
	at Program.main(Program.java:15)

 

123은 문자열로 형변환이 되어 출력되었습니다.

하지만 nullNullPointerException 에러가 발생했습니다.

형변환을 할때 NullPointerException을 방지하고 싶은 경우라면 String.valueOf을 사용하는 것이 좋습니다.

하지만 무조건 String.valueOf을 사용하는 것이 정답은 아닙니다.

형변환을 하려는 값이 null인지 미리 체크를 하는 로직을 추가해 null인 경우의 처리를해 에러 방지를 할 수도 있습니다.

또는 toString을 사용해 형변화을 해야한다면 try catch안에서 사용해 Exception 처리를 해주는 것이 좋습니다.

 

댓글