Study/java

[Java] String - valueOf 문자열 변환 사용법

 

valueOf 메소드는 boolean, char, int  같은 다양한 타입의 값을 문자열로 변환해주는 메소드입니다.

 

valueOf

String클래스 내부에 선언된 valueOf 코드는 총 9개입니다.

Object, char[](offset, count), boolean, char, int, long, float, double

해당 타입 파라미터의 값을 문자열로 변환해줍니다.

int i = 10;
char[] data = {'a', 'b', 'c', 'd', 'e'};
boolean b = true;
long l = 100000000000000l;
float f = 0.000000000001f;
double d = 0.11111111111;

System.out.println("int : " + String.valueOf(i) + ", class : " + String.valueOf(i).getClass());
System.out.println("char[] : " + String.valueOf(data) + ", class : " + String.valueOf(data).getClass());
System.out.println("char[] + offset + count : " + String.valueOf(data, 1, 3) + ", class : " + String.valueOf(data, 1, 3).getClass());
System.out.println("boolean : " + String.valueOf(b) + ", class : " + String.valueOf(b).getClass());
System.out.println("long : " + String.valueOf(l) + ", class : " + String.valueOf(l).getClass());
System.out.println("float : " + String.valueOf(f) + ", class : " + String.valueOf(f).getClass());
System.out.println("double : " + String.valueOf(d) + ", class : " + String.valueOf(d).getClass());

valueOf 사용결과
valueOf 사용결과

valueOf의 결과를 getClass해보면 모두 java.lang.String으로 나오는 것을 확인할 수 있습니다.

이 valueOf들의 내부 코드를 보면 Object와 char를 제외하고 모두 해당 클래스의 toString메소드를 사용합니다.

 

valueOf null을 그대로 사용하면 NullPointerException이 발생합니다.

String s = String.valueOf(null); // NullPointerException 발생
System.out.println(s);	

String s = String.valueOf((Object) null);	// "null" 문자열로 변환됨
System.out.println((s));

형변환을 하지 않으면 valueOf(char[] data) 메소드를 사용하고 형변환을 하면 valueOf(Object obj) 메소드를 사용합니다.

전자는 null을 사용할 수 없고, 후자는 null을 사용할 수 있습니다.

 

 

 

 

toString

이 메소드도 valueOf와 마찬가지로 문자열로 변환해주는 메소드입니다.

Object에 선언된 메소드로 모든 클래스는 toString을 가질 수 있습니다.

마찬가지로 String클래스에도 toString이 있고, Integer, Long, Float, Double에도 toString이 있습니다.

 

그래서 valueOf의 내부 구현 로직에는 해당 클래스의 toString을 사용합니다.

public static String valueOf(int i) {
	return Integer.toString(i);
}

이런식으로 구현되어있습니다.

 

copyValueOf

파라미터로 char배열(+offset, count)을 받습니다.

문자열로 만들어준다는 로직은 같습니다.

char[] data = {'a', 'b', 'c', 'd', 'e'};
System.out.println(String.copyValueOf(data, 1, 3));
System.out.println(String.copyValueOf(data));

copyValueOf 사용결과
copyValueOf 사용결과

char배열을 변수로 사용하는 경우엔 valueOf나 copyValueOf는 로직이 같습니다.