int(정수)를 String(문자열)로 바꾸는 여러가지 방법
평소에 정수타입의 변수를 문자열로 바꿀 때 +"" 를 자주 사용하였다. 편리하기도하고 습관이 되었기 때문이다. 그러다가 갑자기 궁금해져서 바꾸는 방법에 대해서 페이스북 생활코딩 그룹에 도움을 청했다. 댓글을 통해서 2012년도에 작성된 String.valueOf(int) vs ""+int라는 글을 보았고, 몇가지 더 추가해서 실험해보았다. 실험에 사용된 코드는 아래와 같다.
코드
package Test1;
import java.io.IOException;
public class TestClass {
public static void main(String... args) throws IOException {
for (int i = 0; i < 10; i++) {
long svo = perfStringValueOf();
long qqp = perfQuoteQuotePlus();
long its = perfIntegerToString();
long sf = perfStringFormat();
System.out.printf("String.valueOf() : %.3f\t", svo / 1e3);
System.out.printf("Integer.toString() : %.3f\t", its / 1e3);
System.out.printf("\"\"+ : %.3f\t", qqp / 1e3);
System.out.printf("String.Format() : %.3f\n", sf / 1e3);
}
}
private static long perfStringValueOf() {
long start = System.nanoTime();
final int runs = 100000;
String s;
for (int i = 0; i < runs; i++) {
s = String.valueOf(i * i);
if (s.length() < 1)
throw new AssertionError();
}
long time = System.nanoTime() - start;
return time / runs;
}
private static long perfQuoteQuotePlus() {
long start = System.nanoTime();
final int runs = 100000;
String s;
for (int i = 0; i < runs; i++) {
s = "" + i * i;
if (s.length() < 1)
throw new AssertionError();
}
long time = System.nanoTime() - start;
return time / runs;
}
private static long perfIntegerToString() {
long start = System.nanoTime();
final int runs = 100000;
String s;
for (int i = 0; i < runs; i++) {
s = Integer.toString(i * i);
if (s.length() < 1)
throw new AssertionError();
}
long time = System.nanoTime() - start;
return time / runs;
}
private static long perfStringFormat() {
long start = System.nanoTime();
final int runs = 100000;
String s;
for (int i = 0; i < runs; i++) {
s = String.format("%d", i * i);
if (s.length() < 1)
throw new AssertionError();
}
long time = System.nanoTime() - start;
return time / runs;
}
}
결과

첫 실행 속도로 보았을 땐 Integer.toString() < String.valueOf() < ""+ < String.Format() 이다. 하지만 여러번 반복하고 평균적으로 보았을 땐 ""+ < Integer.toString() < String.valueOf() < String.Format() 이었다.
속도와 간단함으로 보았을 땐 ""+ 이었지만 추후에 좀더 성능을 고려해서 다시 실험해보아야겠다.